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


111

업데이트 :이 질문은 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을 확보 할 수 있습니다 (이 업데이트 현재까지).


이것에 대한 해결책이 있습니까? 이유를 수행 할 때 내가 다른 결과를받을 수 있나요 고양이 / proc 디렉토리 / meminfo 파일!
MiloMinderbinder

네, 같은 문제입니다. GPU 램의 약 500MB ... 오해의 소지가있는 설명 :(
Naveen

2
IBM 오픈 소스 데이터 과학 도구 (cognitiveclass.ai)에는 jupyter 노트북이 포함 된 무료 GPU도 있습니다.
AQ

나는 실제로 거기 상태로이 질문에 롤백 한 질문 거기에있다. 더 많은 조사를하고 답을 찾았다면 그에 대한 적절한 위치는 답안 상자에 있습니다. 솔루션으로 질문을 업데이트하는 것은 올바르지 않습니다.
Chris Hayes

@ChrisHayes, 귀하의 의도를 이해하지만 롤백이 현재 사라진 관련 세부 정보를 모두 삭제했기 때문에 이것은 옳지 않습니다. 이 커뮤니티의 규칙에 더 잘 맞는 더 나은 단어를 제안하려면 그렇게하세요. 그렇지 않으면 롤백을 되돌려주세요. 감사합니다. 추신 나는 이미 답변을 게시했습니다 .
stason

답변:


42

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

대답은 간단합니다.

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

2019 년 12 월 업데이트 : 문제가 여전히 존재합니다.이 질문의 찬성 투표는 계속됩니다.

2019 년 3 월 업데이트 : 1 년 후 Google 직원 @AmiF는 문제가 존재하지 않으며이 문제가있는 것으로 보이는 사람은 누구나 단순히 런타임을 재설정하여 메모리를 복구해야한다고 언급하면서 상황에 대해 언급했습니다. 그러나 찬성 투표는 계속되며, 이는 @AmiF의 반대 제안에도 불구하고 문제가 여전히 존재한다는 것을 나타냅니다.

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

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


4
"이 글을 쓰는 현재 Google은 우리 중 일부에게 GPU의 5 % 만 제공하는 반면 다른 사용자에게는 100 % 만 제공합니다. 기간." 잘못되었습니다-Colab은 이런 식으로 작동 한 적이 없습니다. 사용 가능한 GPU RAM의 전체 보완 물보다 적은 것으로 진단 된 모든 사용자 사례는 나머지 GPU RAM을 사용하는 다른 프로세스 (동일한 사용자, 아마도 다른 노트북에서 시작됨)로 귀결되었습니다.
Ami F

11
미래의 독자 : GPU RAM을 사용할 수없는 이와 유사한 증상이 있다고 생각되는 경우 런타임 메뉴의 "모든 런타임 재설정"을 통해 부실 프로세스가 GPU RAM을 계속 유지하고 있지 않음을 보장하는 새로운 VM을 얻을 수 있습니다. 메뉴 옵션을 사용한 후에도 바로이
Ami F

귀하의 현실은 게시물이 작성되고 1 년 후이 게시물에 계속 투표하는 다른 많은 사람들의 현실과는 분명히 다릅니다. 일부 사용자는 실제로 귀하가 설명한 내용을 접할 가능성이 매우 높지만 이것이 모든 경우에는 해당되지 않습니다. 그래서 나는 당신의 진술이 여기서 어떻게 도움이되는지 잘 모르겠습니다. 누군가가 추천 한 저장소에서이 정확한 질문을했을 때 BS 답변을 받고 티켓이 마감되었습니다. github.com/googlecolab/colabtools/issues/52
stason

2
불분명 한 경우 : 구현이 사용자로서의 시스템 동작 관찰을 기반으로한다고 생각하는 내용을 설명하지 않습니다. 구현에 대해 직접 알고있는 내용을 설명하고 있습니다. 나는 전체 가용성에 미치지 못하는 사용자가 위의 잘못된 설명을 읽고 의도 한대로 작동한다고 가정하는 대신 문제 (사용자 오류 또는 시스템 버그)로보고하기를 바라며 게시했습니다.
Ami F

1
아니요, GPU는 공유 된 적이 없으며 연결 한 예에 거짓말이 없습니다 (보고 된 증상의 가장 흔한 원인에 대한 추측과 설명).
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

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

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


1
며칠 동안 아마 50 번 정도 다시 연결했고 처음에는 항상 동일한 95 % 사용량을 얻었습니다. 한 번만 0 %를 보았습니다. 그 모든 시도에서 나는 그것이 100 %에 가까워지면 메모리 오류에서 cuda를 얻었습니다.
stason

업데이트 란 무엇을 의미합니까? 여전히 500Mb로 작업을 실행할 수 있습니까? 나는 내가 얻고, 같은 문제가RuntimeError: cuda runtime error (2) : out of memory at /pytorch/torch/lib/THC/generated/../THCTensorMathCompare.cuh:84
ivan_bilan

6


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


2
감사합니다. 그러나 귀하의 제안은 아무것도 변경하지 않습니다. 여전히 GPU RAM의 5 %를 얻고 있습니다.
stason

이것은 도움이되지 않습니다. 종료하고 다시 연결 한 후에도 GPU 메모리는 여전히 ~ 12GB 중 500MB입니다.
ivan_bilan

4

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


2

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

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


이것이 메모리 문제에 도움이 될까요? 그럼 다른 사람들의 달리기를 모두 죽이지 않습니까?
ivan_bilan 2018

이하지 않습니다 도움이 같은 문제를 가지고 :GPU RAM Free: 564MB
ivan_bilan

2

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

!pkill -9 -f ipykernel_launcher

1
가까운,하지만 시가 :GPU RAM Free: 564MB
ivan_bilan

커널을 다시 시작하는 더 간단한 방법으로 Runtime | 런타임 다시 시작 ... 또는 바로 가기CMD/CTRL+M
Agile Bean

2

이 블랙리스트가 사실인지 확실하지 않습니다! 오히려 가능한 것은 코어가 사용자간에 공유된다는 것입니다. 또한 테스트를 실행했으며 결과는 다음과 같습니다.

Gen RAM 여유 공간 : 12.9GB | 프로세서 크기 : 142.8MB GPU RAM 여유 공간 : 11441MB | 사용 : 0MB | Util 0 % | 총 11441MB

나는 또한 전체 코어를 얻는 것 같습니다. 그러나 나는 그것을 몇 번 실행했고 동일한 결과를 얻었습니다. 변경 사항이 있는지 확인하기 위해 하루에 몇 번이 검사를 반복 할 것입니다.


2

Google colab에 무거운 작업을 주면 25GB의 램으로 변경하라는 메시지가 표시됩니다.

여기에 이미지 설명 입력

예를 들어이 코드를 두 번 실행합니다.

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)

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

여기에 이미지 설명 입력


확인할 수 있습니다. 대부분 HD 사진으로 구성된 15 기가 바이트 데이터 세트 (내 드라이브에는 15 기가 대신 30 기가 있음)가 있었고 코드를 실행하여 이미지 데이터 세트의 크기를 224,224,3으로 조정했고 높은 RAM 런타임으로 전환했습니다. 그런 다음 훈련을 시작했을 때 RAM 사용량이 31.88gig까지 올라갔습니다.
Anshuman Kumar

하지만이 작업을 마친 후 지난 24 시간 동안 다른 GPU / TPU에 액세스 할 수 없었 음을 추가하고 싶습니다. 내가 블랙리스트에 올랐을 가능성이 있습니다.
Anshuman Kumar

@AnshumanKumar, 구성 변경시에만 시작시 높은 부하를 주면 이전에 수행 한 작업을 잃게됩니다. 24 시간 동안 높은 구성을 사용하지 않아 블랙리스트에 대해 알지 못합니다.
Jainil Patel

네, 저 한테 그런 일이 일어났습니다. 그러나 작업은 완료되었습니다.
Anshuman Kumar

1

나는 우리가 여러 개의 노트북을 열었다 고 생각합니다. 닫는 것만으로 프로세스가 실제로 중지되는 것은 아닙니다. 나는 그것을 막는 방법을 찾지 못했습니다. 그러나 나는 가장 오래 실행되고 대부분의 메모리를 사용하는 python3의 PID를 찾기 위해 top을 사용하여 죽였습니다. 이제 모든 것이 정상으로 돌아갑니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.