programing

Google 공동 연구소: GPU에 대한 오해의 소지가 있는 정보(일부 사용자는 5%의 RAM만 사용 가능)

newstyles 2023. 8. 17. 20:59

Google 공동 연구소: GPU에 대한 오해의 소지가 있는 정보(일부 사용자는 5%의 RAM만 사용 가능)

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

Google 공동 연구소에서 무료 Tesla K80 GPU를 제공하는 것에 대한 여러 흥분된 발표를 읽고, 저는 fast.ai 레슨을 실행하여 메모리가 빠르게 부족해지는 것을 결코 완료하지 못하도록 했습니다.그 이유를 조사하기 시작했습니다.

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

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

명확하게 0.5대부분의 ML/DL 작업에 GB GPU RAM이 부족합니다.

무엇을 얻을 수 있는지 확신할 수 없는 경우 다음은 제가 긁어모은 디버그 기능입니다(노트북의 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()

다른 코드를 실행하기 전에 주피터 노트북에서 실행하면 다음과 같은 이점이 있습니다.

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의 일부를 소비할 수 있는 잠재적인 고착/도주/병렬 노트북을 죽이는 방법에 대해 더 이상 제안을 보내지 마십시오. 어떻게 자르든 저와 같은 처지에 있고 디버그 코드를 실행하면 GPU RAM의 총 5%를 여전히 사용할 수 있습니다(이 업데이트 기준).

따라서!kill-9-1에 대한 이 스레드 제안의 맥락에서 유효하지 않다고 제안하는 12개의 답변을 방지하려면 이 스레드를 닫으십시오.

답은 간단합니다.

이 글을 쓰는 시점에서 Google은 GPU의 5%만 우리 중 일부에게 제공하는 반면 100%는 다른 사람들에게 제공합니다.마침표.

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

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

2018년 12월 업데이트:저는 구글의 로봇이 비표준적인 행동을 감지할 때 구글이 특정 계정 또는 브라우저 지문의 블랙리스트를 가지고 있을 수 있다는 이론을 가지고 있습니다.완전히 우연의 일치일 수도 있지만, 꽤 오랫동안 구글 리캡처에 문제가 있었습니다. 구글 리캡처가 필요한 웹사이트에서 저는 제가 그것을 통과하도록 허락받기 전에 수십 개의 퍼즐을 거쳐야 했고, 종종 저는 그것을 완성하는 데 10분 이상이 걸렸습니다.이것은 여러 달 동안 지속되었습니다.이번 달부터 갑자기 저는 퍼즐을 전혀 받지 못하고 거의 1년 전처럼 마우스 클릭 한 번으로 구글 재캡처가 해결됩니다.

왜 내가 이 이야기를 하는 거지?동시에 Colab에서 GPU RAM의 100%를 제공받았기 때문입니다.그렇기 때문에 이론적인 구글 블랙리스트에 오른다면 무료로 많은 자원을 제공받을 수 있다는 믿음을 받지 못하고 있다는 것이 제 의심의 이유입니다.제한된 GPU 액세스와 리캡처 악몽 사이에 동일한 상관관계를 발견한 사람이 있는지 궁금합니다.제가 말했듯이, 그것은 완전히 우연일 수도 있습니다.

어젯밤에 당신의 스니펫을 조사했는데 당신이 얻은 것을 정확히 얻었습니다.

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로 전환할 가능성도 있습니다.

업데이트됨:어젯밤에 받은 Resource Exhausted Error의 원인으로 생각했던 GPU RAM Free가 504MB일 때도 GPU를 정상적으로 사용할 수 있는 것으로 나타났습니다.

만약 당신이 방금 가진 셀을 실행한다면.
-9 !스킬 -9 -1
그러면 런타임 상태(메모리, 파일 시스템 및 GPU 포함)가 모두 삭제되고 다시 시작됩니다.30-60초 동안 기다린 후 오른쪽 상단의 CONNECT 버튼을 눌러 다시 연결합니다.

Jupyter IPython 커널 다시 시작:

!pkill -9 -f ipykernel_launcher

파이썬3 pid를 찾아서 pid를 죽여야 합니다.아래enter image description here 이미지를 참조하십시오.

참고: 주피터 파이썬(122)이 아닌 python3(pid=130)만 제거합니다.

구글 콜라브에 무거운 작업을 주면 25gb의 램으로 변경하도록 요청할 것입니다.

enter image description here

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

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)

그런 다음 get more ram을 클릭합니다 :)

enter image description here

이 블랙리스트가 사실인지 확실하지 않습니다!코어를 사용자 간에 공유할 수 있습니다.저는 또한 테스트를 실행했고, 제 결과는 다음과 같습니다.

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

풀코어도 되는 것 같습니다.하지만 저는 그것을 몇 번 실행했고 같은 결과를 얻었습니다.아마 낮에 몇 번씩 이 검사를 반복해서 변동 사항이 있는지 확인할 것 같습니다.

저는 우리가 노트북을 여러 개 비웠으면 좋겠어요.그것을 닫는다고 해서 실제로 그 과정이 중단되는 것은 아닙니다.어떻게 막을 수 있을지 모르겠어요.하지만 저는 가장 오래 실행되고 대부분의 메모리를 사용하는 파이썬3의 PID를 찾기 위해 탑을 사용했고 그것을 죽였습니다.이제 모든 것이 정상으로 돌아왔습니다.

Google Colab 리소스 할당은 사용자의 과거 사용량에 따라 동적으로 이루어집니다.사용자가 최근에 더 많은 리소스를 사용하고 있고 Colab을 덜 자주 사용하는 새 사용자가 리소스 할당에서 상대적으로 더 많은 선호도를 받는다고 가정합니다.

따라서 Colab에서 최대치를 얻으려면 Colab 탭과 다른 모든 활성 세션을 닫고 사용할 세션의 런타임을 재설정합니다.GPU 할당을 더 잘 할 수 있을 것입니다.

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