Google Colaboratory: вводящая в заблуждение информация о его графическом процессоре (некоторым пользователям доступно только 5% оперативной памяти)

112

обновление: этот вопрос связан с Google Colab "Настройки ноутбука: Аппаратный ускоритель: GPU". Этот вопрос был написан до того, как была добавлена ​​опция «TPU».

Прочитав несколько восторженных объявлений о том, что Google Colaboratory предоставляет бесплатный графический процессор Tesla K80, я попытался запустить на нем урок fast.ai, чтобы он никогда не завершился - быстро закончилась память. Я начал выяснять, почему.

Суть в том, что «бесплатная Tesla K80» не «бесплатна» для всех - для некоторых «бесплатна» лишь небольшая ее часть.

Я подключаюсь к Google Colab из западного побережья Канады и получаю только 0,5 ГБ из того, что должно было быть 24 ГБ оперативной памяти графического процессора. Остальные пользователи получают доступ к 11 ГБ оперативной памяти графического процессора.

Очевидно, что 0,5 ГБ ОЗУ графического процессора недостаточно для большинства операций ML / DL.

Если вы не уверены, что получите, вот небольшая функция отладки, которую я собрал вместе (работает только с настройкой графического процессора ноутбука):

# memory footprint support libraries/code
!ln -sf /opt/bin/nvidia-smi /usr/bin/nvidia-smi
!pip install gputil
!pip install psutil
!pip install humanize
import psutil
import humanize
import os
import GPUtil as GPU
GPUs = GPU.getGPUs()
# XXX: only one GPU on Colab and isn’t guaranteed
gpu = GPUs[0]
def printm():
 process = psutil.Process(os.getpid())
 print("Gen RAM Free: " + humanize.naturalsize( psutil.virtual_memory().available ), " | Proc size: " + humanize.naturalsize( process.memory_info().rss))
 print("GPU RAM Free: {0:.0f}MB | Used: {1:.0f}MB | Util {2:3.0f}% | Total {3:.0f}MB".format(gpu.memoryFree, gpu.memoryUsed, gpu.memoryUtil*100, gpu.memoryTotal))
printm()

Выполнение его в блокноте jupyter перед запуском любого другого кода дает мне:

Gen RAM Free: 11.6 GB  | Proc size: 666.0 MB
GPU RAM Free: 566MB | Used: 10873MB | Util  95% | Total 11439MB

Удачливые пользователи, получившие доступ к полной карте, увидят:

Gen RAM Free: 11.6 GB  | Proc size: 666.0 MB
GPU RAM Free: 11439MB | Used: 0MB | Util  0% | Total 11439MB

Видите ли вы какой-нибудь изъян в моих расчетах доступности оперативной памяти графического процессора, заимствованных из GPUtil?

Можете ли вы подтвердить, что вы получите аналогичные результаты, если запустите этот код в блокноте Google Colab?

Если мои расчеты верны, есть ли способ получить больше этой оперативной памяти графического процессора в бесплатной коробке?

обновление: я не уверен, почему некоторые из нас получают 1/20 того, что получают другие пользователи. например, человек, который помог мне отладить это, из Индии, и он получает все!

Примечание : пожалуйста, не присылайте больше предложений о том, как убить потенциально застрявшие / выходящие из строя / параллельные ноутбуки, которые могут потреблять части графического процессора. Независимо от того, как вы это делаете, если вы находитесь в той же лодке, что и я, и должны были запустить код отладки, вы увидите, что вы все еще получаете в общей сложности 5% ОЗУ графического процессора (на момент этого обновления).

Стасон
источник
Любое решение для этого? почему я получаю разные результаты при выполнении! cat / proc / meminfo
MiloMinderbinder
Да, та же проблема, всего около 500 МБ оперативной памяти графического процессора ... вводящее в заблуждение описание :(
Naveen
2
Попробуйте инструменты IBM для анализа данных с открытым исходным кодом (cognitiveclass.ai), поскольку у них также есть бесплатный графический процессор с ноутбуками jupyter.
AQ
Я откатил этот вопрос до состояния, когда в нем действительно есть вопрос . Если вы провели дополнительное исследование и нашли ответ, подходящее место для этого находится в поле для ответа. Обновлять вопрос решением некорректно.
Крис Хейс,
@ChrisHayes, я понимаю ваше намерение, но это неверно, так как ваш откат удалил целую кучу важных деталей, которых теперь нет. Если вы хотите предложить лучшую формулировку, которая лучше соответствует правилам этого сообщества, сделайте это, но в противном случае, пожалуйста, отмените откат. Спасибо. ps Я уже отправил ответ .
stason

Ответы:

42

Итак, чтобы предотвратить еще одну дюжину ответов, предполагающих недействительность в контексте предложения этого потока для! Kill -9-1, давайте закроем этот поток:

Ответ прост:

На момент написания этой статьи Google просто предоставляет лишь 5% графического процессора одним из нас, а другим - 100%. Период.

Обновление декабрь-2019: проблема все еще существует - ответы на этот вопрос все еще продолжаются.

Обновление за март-2019: год спустя сотрудник Google @AmiF прокомментировал положение вещей, заявив, что проблемы не существует, и любому, у кого, похоже, есть эта проблема, необходимо просто сбросить время выполнения, чтобы восстановить память. Тем не менее, голоса продолжаются, что для меня говорит о том, что проблема все еще существует, несмотря на предложение @ AmiF об обратном.

Обновление за декабрь 2018 г .: у меня есть теория, что у Google может быть черный список определенных учетных записей или, возможно, отпечатков пальцев браузера, когда его роботы обнаруживают нестандартное поведение. Это могло быть полным совпадением, но в течение некоторого времени у меня была проблема с Google Re-captcha на любом веб-сайте, который требовал этого, где мне приходилось решать десятки головоломок, прежде чем меня пропускали, часто на выполнение у меня ушло 10+ минут. Так продолжалось много месяцев. Внезапно, начиная с этого месяца, у меня вообще нет головоломок, и любая повторная капча Google решается одним щелчком мыши, как это было почти год назад.

И зачем я рассказываю эту историю? Ну потому что при этом мне дали 100% RAM GPU на Colab . Вот почему я подозреваю, что если вы находитесь в теоретическом черном списке Google, то вам не доверяют предоставление большого количества ресурсов бесплатно. Интересно, найдет ли кто-нибудь из вас такую ​​же корреляцию между ограниченным доступом к графическому процессору и кошмаром Re-captcha. Как я уже сказал, это тоже могло быть полным совпадением.

Стасон
источник
4
Ваше заявление: «На момент написания этой статьи Google просто предоставляет только 5% GPU некоторым из нас, тогда как 100% другим. Период». неверно - Колаб так никогда не работал. Все диагностированные случаи, когда пользователи видят неполный объем доступной им ОЗУ графического процессора, сводятся к другому процессу (запущенному тем же пользователем, возможно, в другом ноутбуке) с использованием остальной части ОЗУ графического процессора.
Ami F
11
Будущие читатели: если вы думаете, что видите этот или аналогичные симптомы недоступности ОЗУ графического процессора, «Сбросить все среды выполнения» в меню «Время выполнения» предоставит вам новую виртуальную машину, гарантирующую, что устаревшие процессы все еще не удерживают ОЗУ графического процессора. Если вы все еще видите этот симптом сразу после использования этого
Ami F,
Ваша реальность явно отличается от реальности многих других, которые продолжают голосовать за этот пост через год после его создания. Очень вероятно, что некоторые пользователи действительно сталкиваются с тем, что вы описали, но это не для всех. Так что я не уверен, как здесь помогает ваше заявление. Кроме того, когда кто-то задал именно этот вопрос в репо, рекомендованном вами, он получил ответ BS, и его билет был закрыт: github.com/googlecolab/colabtools/issues/52
stason
2
На случай, если это было неясно: я не описываю, что, по моему мнению, реализация основана на наблюдении за поведением системы как пользователя. Я описываю то, что я знаю о реализации. Я писал в надежде, что пользователи, которые видят неполную доступность, сообщат об этом как о проблеме (либо об ошибке пользователя, либо о системной ошибке) вместо того, чтобы читать неверные утверждения выше и предполагать, что все работает как задумано.
Ami F
1
Нет, графические процессоры никогда не использовались совместно, и в приведенном вами примере нет лжи (просто предположение и объяснение самой распространенной причины указанного симптома).
Ami F
22

Вчера вечером я запустил ваш фрагмент и получил именно то, что вы получили:

Gen RAM Free: 11.6 GB  | Proc size: 666.0 MB
GPU RAM Free: 566MB | Used: 10873MB | Util  95% | Total 11439MB

но сегодня:

Gen RAM Free: 12.2 GB  I Proc size: 131.5 MB
GPU RAM Free: 11439MB | Used: 0MB | Util   0% | Total 11439MB

Я думаю, что наиболее вероятная причина заключается в том, что графические процессоры совместно используются виртуальными машинами, поэтому каждый раз, когда вы перезапускаете среду выполнения, у вас есть возможность переключить графический процессор, а также есть вероятность, что вы переключитесь на тот, который используется другими пользователями.

ОБНОВЛЕНО: Оказывается, я могу использовать графический процессор в обычном режиме, даже когда объем свободной оперативной памяти графического процессора составляет 504 МБ, что я считал причиной ResourceExhaustedError, которую я получил вчера вечером.

Нгуен Тай Лонг
источник
1
Я думаю, что повторно подключался, вероятно, 50 раз в течение нескольких дней, и я всегда получал те же 95% использования с самого начала. Только однажды увидел 0%. Во всех этих попытках я получал ошибку нехватки памяти, когда она приближалась к 100%.
stason
Что вы имеете в виду под своим обновлением? Вы все еще можете запускать вещи с 500 МБ? У меня такая же проблема, я получаюRuntimeError: cuda runtime error (2) : out of memory at /pytorch/torch/lib/THC/generated/../THCTensorMathCompare.cuh:84
ivan_bilan
6

Если вы выполните ячейку, в которой есть только
! Kill -9-1
, это приведет к тому, что все состояние вашей среды выполнения (включая память, файловую систему и графический процессор) будет очищено и перезапущено. Подождите 30-60 секунд и нажмите кнопку ПОДКЛЮЧЕНИЕ в правом верхнем углу для повторного подключения.

Аджайчхимпа1
источник
2
спасибо, но ваше предложение ничего не меняет. Я все еще получаю 5% оперативной памяти графического процессора.
stason 02
Это не помогает. После убийства и переподключения память GPU по-прежнему составляет 500 МБ из ~ 12 ГБ.
ivan_bilan
4

Вводящее в заблуждение описание со стороны Google. Думаю, я тоже был слишком взволнован. Настроил все, загрузил данные, и теперь я не могу с ними ничего делать, так как для моего ноутбука выделено только 500 МБ памяти.

ivan_bilan
источник
2

Найдите pid Python3 и убейте pid. См. Изображение нижевведите описание изображения здесь

Примечание: уничтожьте только python3 (pid = 130), а не jupyter python (122).

Маниваннан Муругавел
источник
это поможет с проблемой памяти? разве ты не убиваешь все чужие забеги?
ivan_bilan
это не помогает, такая же проблема:GPU RAM Free: 564MB
ivan_bilan
2

Перезапустите ядро ​​Jupyter IPython:

!pkill -9 -f ipykernel_launcher
mkczyk
источник
1
близко, но нет сигары:GPU RAM Free: 564MB
ivan_bilan
в качестве более простого метода перезапуска ядра вы можете просто щелкнуть Runtime | Перезапустить среду выполнения ... или ярлыкCMD/CTRL+M
Agile Bean
2

Я не уверен, что этот черный список правдив! Вполне возможно, что ядра поделены между пользователями. Я также провел тест, и мои результаты следующие:

Gen RAM Бесплатно: 12,9 ГБ | Размер процесса: 142,8 МБ ОЗУ графического процессора Свободно: 11441 МБ | Использовано: 0MB | Использовать 0% | Всего 11441MB

Кажется, я тоже получаю полное ядро. Однако я запускал его несколько раз и получил тот же результат. Возможно, я повторю эту проверку несколько раз в течение дня, чтобы увидеть, есть ли какие-либо изменения.

Kregnach
источник
2

просто дайте Google Colab тяжелую задачу, он попросит нас поменять на 25 ГБ оперативной памяти.

введите описание изображения здесь

пример запустите этот код дважды:

import numpy as np
from keras.layers import Conv2D, MaxPooling2D, AveragePooling2D
from keras.layers import Dropout, Flatten, Dense
from keras.models import Sequential
from keras.layers.advanced_activations import LeakyReLU
from keras.datasets import cifar10
(train_features, train_labels), (test_features, test_labels) = cifar10.load_data()
model = Sequential()

model.add(Conv2D(filters=16, kernel_size=(2, 2), padding="same", activation="relu", input_shape=(train_features.shape[1:])))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))

model.add(Conv2D(filters=32, kernel_size=(3, 3), padding="same", activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))

model.add(Conv2D(filters=64, kernel_size=(4, 4), padding="same", activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))

model.add(Flatten())

model.add(Dense(25600, activation="relu"))
model.add(Dense(25600, activation="relu"))
model.add(Dense(25600, activation="relu"))
model.add(Dense(25600, activation="relu"))
model.add(Dense(10, activation="softmax"))

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

model.fit(train_features, train_labels, validation_split=0.2, epochs=10, batch_size=128, verbose=1)

затем нажмите получить больше баранов :) введите описание изображения здесь введите описание изображения здесь

введите описание изображения здесь

Джайнил Патель
источник
Я могу это подтвердить. У меня был 15-гигабайтный набор данных в основном HD-изображений (у моего диска 30 гигабайт вместо 15 гигов), и я запустил свой код, чтобы изменить размер набора данных изображения до 224 224,3, и я был переключен на время выполнения с высокой оперативной памятью. Затем, когда я начал тренироваться, использование ОЗУ увеличилось до 31,88 ГБ.
Аншуман Кумар
Но я хотел бы добавить, что как только я закончил эту работу, я не мог получить доступ к другому GPU / TPU в течение последних 24 часов. Возможно, я попал в черный список.
Аншуман Кумар
@AnshumanKumar, дайте высокую нагрузку только в начале, иначе при изменении конфигурации вы потеряете ранее выполненную работу, которая находится в оперативной памяти. Я не использовал высокую конфигурацию в течение 24 часов, поэтому я не знаю о черных списках.
Джайнил Патель,
Да, это случилось со мной. Однако работа была сделана.
Аншуман Кумар
1

Я думаю, если у нас открыто несколько записных книжек. Просто его закрытие на самом деле не останавливает процесс. Я не понял, как это остановить. Но я использовал top, чтобы найти PID python3, который работал дольше всего и использовал большую часть памяти, и я убил его. Теперь все в норме.

Ritwik G
источник