developer tip

Google Colaboratory : GPU에 대한 잘못된 정보 (일부 사용자는 5 % RAM 만 사용 가능)

copycodes 2020. 9. 10. 07:59
반응형

Google Colaboratory : GPU에 대한 잘못된 정보 (일부 사용자는 5 % RAM 만 사용 가능)


업데이트 :이 질문은 Google Colab의 "노트북 설정 : 하드웨어 가속기 : GPU"와 관련이 있습니다. 이 질문은 "TPU"옵션이 추가되기 전에 작성되었습니다.

무료 Tesla K80 GPU를 제공하는 Google Colaboratory에 대한 여러 가지 흥미 진진한 발표를 읽은 후, 절대 완료되지 않도록 fast.ai 강의 를 실행하려고했습니다 . 빠르게 메모리가 부족합니다. 나는 그 이유를 조사하기 시작했습니다.

결론은 "무료 Tesla K80"이 모두에게 "무료"가 아니라는 것입니다. 일부에게는 "무료"가 있습니다.

캐나다 서부 해안의 Google Colab에 연결하면 24GB GPU RAM으로 예상되는 0.5GB 만 얻습니다. 다른 사용자는 11GB의 GPU RAM에 액세스 할 수 있습니다.

분명히 0.5GB GPU RAM은 대부분의 ML / DL 작업에 충분하지 않습니다.

당신이 무엇을 얻는 지 잘 모르겠다면, 여기 내가 함께 긁어 낸 작은 디버그 기능이있다 (노트북의 GPU 설정에서만 작동한다) :

# 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에서 빌린 GPU RAM 가용성 계산에 결함이 있습니까?

Google Colab 노트북에서이 코드를 실행하면 유사한 결과가 나오는지 확인할 수 있습니까?

내 계산이 정확하다면 무료 상자에서 GPU RAM을 더 많이 얻을 수있는 방법이 있습니까?

업데이트 : 왜 우리 중 일부는 다른 사용자가받는 것의 1/20를 받는지 잘 모르겠습니다. 예를 들어이 문제를 디버깅하는 데 도움을 준 사람은 인도 출신이고 그는 모든 것을 얻습니다!

참고 : GPU의 일부를 소모 할 수있는 잠재적으로 멈춤 / 폭주 / 병렬 노트북을 죽이는 방법에 대한 더 이상 제안을 보내지 마십시오. 어떻게 슬라이스하든 저와 같은 보트에 있고 디버그 코드를 실행하면 여전히 총 ​​5 %의 GPU RAM을 확보 할 수 있습니다 (이 업데이트 시점에서도 여전히).


따라서이 스레드 제안의 맥락에서 유효하지 않다고 제안하는 12 개의 답변을! kill -9 -1에 방지하기 위해이 스레드를 닫습니다.

대답은 간단합니다.

이 글을 쓰는 시점에서 Google은 우리 중 일부에게 GPU의 5 % 만 제공하는 반면 다른 사용자에게는 100 % 만 제공합니다. 기간.

2019 년 3 월 업데이트 : 1 년 후 Google은 마침내이 스레드를 발견하고 @AmiF를 전송하여 신용을 떨어 뜨 렸습니다.이 문제가있는 모든 사람은 메모리를 복구하기 위해 런타임을 재설정하는 방법을 알아낼 수없는 무능한 사용자임을 암시합니다. @AmiF는이 문제가 코드의 버그 일 뿐이며 사용자가 회사 정책과 버그를 말할 수 없다고 제안합니다.

불행히도, 완전한 공개는 이루어지지 않았고 우리는 실제로 무슨 일이 벌어 질지에 대한 추측 만 남았습니다. 분명히 영리를 목적으로하는 회사는 누구에게 좋은지에 대한 유보를 가지므로 여기서 차별을 피하는 것은 불가능합니다. 총체적으로 말이되며 매우 논리적입니다. 이 리소스는 무료로 제공되기 때문에 불만을 제기 할 수는 없지만 일부는 블랙리스트에 올랐고 다른 일부는 동일한 설정 / 로케일에서는 그렇지 않은 이유 만 묻습니다.

내 개인 계정이 2018 년 12 월 블랙리스트에서 제거되었으므로 (아래 업데이트 참조) 여전히 블랙리스트에있는 다른 사용자에게만 진실을 말할 수 있습니다. 이 업데이트를 작성하면서이 스레드는 또 다른 찬성표를 얻었습니다.

즉, 적어도 제거를 요청하는 사람들을 위해 Google이 블랙리스트를 끝낼 수 있기를 바랍니다. 우리 중 대부분은 그러한 목록에 오르기 위해 유죄를 선고하는 활동을하지 않았고 단순히 미성숙 한 기계 학습 두뇌에 잡혀서 자신이 무죄임을 증명할 기회가 없습니다. @AmyF은이 문제를보고 제안 http://github.com/googlecolab/colabtools/issues - 문제를보고하고 멀리 티켓 닦았이처럼 전혀 조사 닫히지 경우 경우 , 귀하의 미해결에 링크를 게시하시기 바랍니다 이 답변의 의견에 문제를 제기하여 책임을 물을 수 있습니다.

물론이 스레드 를 찬성하기 전에 colab의 런타임 메뉴에서 "모든 런타임 재설정"을 수행 하고 아직 GPU RAM을 소비하는 미완성 노트북 문제가 있는지 확인하고 영향을받지 않는지 확인하십시오. 블랙리스트 정책.

찬성 투표가 중지되면이 차별 정책이 폐지되었음을 알게됩니다. 안타깝게도이 업데이트에서는 아래에 @AmyF의 댓글이 매우 모호하게 표시됩니다.

2018 년 12 월 업데이트 : 로봇이 비표준 동작을 감지하면 Google에 특정 계정 또는 브라우저 지문의 블랙리스트가있을 수 있다는 이론이 있습니다. 우연의 일치 일 수 있지만 꽤 오랫동안 Google Re-captcha가 필요한 모든 웹 사이트에서 문제가 발생했습니다. 달성하는 데 10 분 이상 걸립니다. 이것은 수개월 동안 지속되었습니다. 이달이되자 갑자기 퍼즐이 전혀 나오지 않고 거의 1 년 전처럼 마우스 클릭 한 번으로 모든 Google 재캡 차가 해결됩니다.

그리고 내가이 이야기를하는 이유는 무엇입니까? 음, 동시에 Colab에서 GPU RAM의 100 %를 받았기 때문 입니다. 그렇기 때문에 이론적 인 Google 블랙리스트에 있다면 많은 리소스를 무료로 제공받을 수 있다고 믿어지지 않는다고 의심합니다. 제한된 GPU 액세스와 Re-captcha 악몽 사이에 동일한 상관 관계가 있는지 궁금합니다. 내가 말했듯이 그것은 또한 완전히 우연 일 수 있습니다.


어젯밤에 귀하의 스 니펫을 실행하여 정확히 얻은 결과를 얻었습니다.

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

가장 가능성있는 이유는 GPU가 VM간에 공유되기 때문이라고 생각하므로 런타임을 다시 시작할 때마다 GPU를 전환 할 수 있으며 다른 사용자가 사용중인 GPU로 전환 할 가능성도 있습니다.

업데이트 : GPU RAM Free가 504MB 인 경우에도 GPU를 정상적으로 사용할 수 있다는 것이 밝혀졌습니다. 이는 어제 밤에 발생한 ResourceExhaustedError의 원인으로 생각했습니다.



! kill -9 -1 만있는 셀을 실행
하면 모든 런타임 상태 (메모리, 파일 시스템 및 GPU 포함)가 완전히 삭제되고 다시 시작됩니다. 다시 연결하려면 30-60 초 동안 기다린 후 오른쪽 상단의 CONNECT 버튼을 누릅니다.


Google 측의 오해의 소지가있는 설명입니다. 나도 그것에 대해 너무 흥분한 것 같아요. 모든 것을 설정하고 데이터를로드하면 노트북에 500Mb 메모리 만 할당되어 있으므로 아무것도 할 수 없습니다.


Python3 pid를 찾아서 pid를 죽이십시오. 아래 이미지를 참조하십시오여기에 이미지 설명 입력

참고 : jupyter python (122)이 아닌 python3 (pid = 130) 만 종료하십시오.


Jupyter IPython Kernel을 다시 시작합니다.

!pkill -9 -f ipykernel_launcher

Im not sure if this blacklisting is true! Its rather possible, that the cores are shared among users. I ran also the test, and my results are the following:

Gen RAM Free: 12.9 GB | Proc size: 142.8 MB GPU RAM Free: 11441MB | Used: 0MB | Util 0% | Total 11441MB

It seems im getting also full core. However i ran it a few times, and i got the same result. Maybe i will repeat this check a few times during the day to see if there is any change.


I believe if we have multiple notebooks open. Just closing it doesn't actually stop the process. I haven't figured out how to stop it. But I used top to find PID of the python3 that was running longest and using most of the memory and I killed it. Everything back to normal now.


just give a heavy task to google colab, it will ask us to change to 25 gb of ram.

여기에 이미지 설명 입력

example run this code twice:

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)

그런 다음 더 많은 램 얻기를 클릭하십시오 :) 여기에 이미지 설명 입력 여기에 이미지 설명 입력

여기에 이미지 설명 입력


!pkill -9 -f ipykernel_launcher

이것은 공간을 확보했습니다

참고 URL : https://stackoverflow.com/questions/48750199/google-colaboratory-misleading-information-about-its-gpu-only-5-ram-available

반응형