Google Colaboratory: ข้อมูลที่ทำให้เข้าใจผิดเกี่ยวกับ GPU (มี RAM เพียง 5% สำหรับผู้ใช้บางราย)


113

อัปเดต: คำถามนี้เกี่ยวข้องกับ "การตั้งค่าโน้ตบุ๊ค: ตัวเร่งฮาร์ดแวร์: GPU" ของ Google Colab คำถามนี้เขียนขึ้นก่อนที่จะเพิ่มตัวเลือก "TPU"

อ่านประกาศตื่นเต้นหลายเกี่ยวกับ Google Colaboratory ให้ฟรี Tesla GPU K80 ผมพยายามที่จะเรียกใช้fast.aiบทเรียนเกี่ยวกับมันมันจะไม่สมบูรณ์ - ได้อย่างรวดเร็ววิ่งออกมาจากหน่วยความจำ ฉันเริ่มตรวจสอบสาเหตุ

บรรทัดล่างคือ“ ฟรี Tesla K80” ไม่ใช่“ ฟรี” สำหรับทุกคน - สำหรับบางส่วนเท่านั้นที่เป็น "ฟรี"

ฉันเชื่อมต่อกับ Google Colab จาก West Coast Canada และได้รับเพียง 0.5GB ของสิ่งที่ควรจะเป็น GPU RAM 24GB ผู้ใช้รายอื่นสามารถเข้าถึง GPU RAM ขนาด 11GB

เห็นได้ชัดว่า 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

คุณเห็นข้อบกพร่องในการคำนวณความพร้อมใช้งาน GPU RAM ของฉันที่ยืมมาจาก GPUtil หรือไม่?

คุณสามารถยืนยันได้หรือไม่ว่าคุณจะได้ผลลัพธ์ที่คล้ายกันหากคุณรันโค้ดนี้บนโน้ตบุ๊ก Google Colab

หากการคำนวณของฉันถูกต้องมีวิธีใดบ้างที่จะได้รับ GPU RAM เพิ่มเติมในกล่องฟรี

อัปเดต: ฉันไม่แน่ใจว่าทำไมพวกเราบางคนถึงได้ 1/20 ของสิ่งที่ผู้ใช้รายอื่นได้รับ เช่นคนที่ช่วยฉันแก้จุดบกพร่องนี้มาจากอินเดียและเขาได้รับสิ่งทั้งหมด!

หมายเหตุ : โปรดอย่าส่งคำแนะนำเพิ่มเติมเกี่ยวกับวิธีฆ่าโน้ตบุ๊กที่อาจติดค้าง / หนี / ขนานซึ่งอาจใช้ส่วนต่างๆของ GPU ไม่ว่าคุณจะหั่นมันอย่างไรหากคุณอยู่ในเรือลำเดียวกับฉันและต้องเรียกใช้รหัสดีบักคุณจะเห็นว่าคุณยังได้รับ GPU RAM ทั้งหมด 5% (ณ การอัปเดตนี้ยังคงอยู่)


วิธีแก้ปัญหานี้หรือไม่? ทำไมฉันถึงได้ผลลัพธ์ที่แตกต่างกันเมื่อทำ! cat / proc / meminfo
MiloMinderbinder

ใช่ปัญหาเดียวกัน RAM GPU ประมาณ 500 mb ... คำอธิบายที่ทำให้เข้าใจผิด :(
Naveen

2
ลองใช้เครื่องมือวิทยาศาสตร์ข้อมูลโอเพนซอร์สของ IBM (cognitiveclass.ai) เนื่องจากมี GPU ฟรีพร้อมสมุดบันทึก jupyter
AQ

ฉันย้อนคำถามนี้กลับสู่สถานะที่มีคำถามอยู่ในนั้นจริงๆ หากคุณได้ทำการค้นคว้าเพิ่มเติมและพบคำตอบสถานที่ที่เหมาะสมจะอยู่ในกล่องคำตอบ การอัปเดตคำถามพร้อมวิธีแก้ปัญหาไม่ถูกต้อง
Chris Hayes

@ChrisHayes ฉันเข้าใจเจตนาของคุณ แต่นี่ไม่ถูกต้องเนื่องจากการย้อนกลับของคุณได้ลบรายละเอียดที่เกี่ยวข้องทั้งหมดที่ตอนนี้หายไป หากคุณต้องการแนะนำถ้อยคำที่ดีกว่าซึ่งเหมาะกับกฎของชุมชนนี้โปรดดำเนินการดังกล่าว แต่ไม่เช่นนั้นโปรดยกเลิกการย้อนกลับของคุณ ขอบคุณ. ps ฉันโพสต์คำตอบไปแล้ว
stason

คำตอบ:


43

ดังนั้นเพื่อป้องกันไม่ให้คำตอบอีกโหลที่บอกว่าไม่ถูกต้องในบริบทของคำแนะนำเธรดนี้ถึง! kill -9 -1 ให้ปิดเธรดนี้:

คำตอบนั้นง่ายมาก:

จากการเขียนนี้ Google ให้ GPU เพียง 5% แก่พวกเราบางคนในขณะที่คนอื่น ๆ 100% ระยะเวลา

การอัปเดตธันวาคม 2019: ปัญหายังคงมีอยู่ - การโหวตของคำถามนี้ยังคงดำเนินต่อไป

การอัปเดตมีนาคม 2019: หนึ่งปีต่อมาพนักงานของ Google @AmiF แสดงความคิดเห็นเกี่ยวกับสถานะของสิ่งต่างๆโดยระบุว่าปัญหานี้ไม่มีอยู่จริงและใครก็ตามที่ดูเหมือนจะมีปัญหานี้จำเป็นต้องรีเซ็ตรันไทม์เพื่อกู้คืนหน่วยความจำ อย่างไรก็ตามการโหวตเพิ่มขึ้นยังคงดำเนินต่อไปซึ่งสำหรับฉันสิ่งนี้บอกได้ว่าปัญหายังคงมีอยู่แม้ว่าข้อเสนอแนะของ @ AmiF จะตรงกันข้ามก็ตาม

การอัปเดตธันวาคม 2018: ฉันมีทฤษฎีว่า Google อาจมีบัญชีดำของบัญชีบางบัญชีหรืออาจเป็นลายนิ้วมือของเบราว์เซอร์เมื่อหุ่นยนต์ตรวจพบพฤติกรรมที่ไม่ได้มาตรฐาน อาจเป็นเรื่องบังเอิญทั้งหมด แต่ในบางครั้งฉันมีปัญหากับ Google Re-captcha บนเว็บไซต์ใด ๆ ที่จำเป็นต้องใช้ซึ่งฉันต้องผ่านปริศนาหลายสิบข้อก่อนที่ฉันจะได้รับอนุญาตบ่อยครั้ง ใช้เวลา 10+ นาทีเพื่อทำให้สำเร็จ นี้กินเวลานานหลายเดือน ทันใดนั้นในเดือนนี้ฉันไม่ได้รับปริศนาใด ๆ เลยและ Google re-captcha ได้รับการแก้ไขด้วยการคลิกเมาส์เพียงครั้งเดียวเหมือนที่เคยเป็นเมื่อเกือบปีที่แล้ว

และทำไมฉันถึงเล่าเรื่องนี้? ดีเพราะในเวลาเดียวกันผมได้รับ 100% ของ RAM GPU บน Colab นั่นเป็นเหตุผลที่ฉันสงสัยว่าถ้าคุณอยู่ในบัญชีดำของ Google ตามทฤษฎีแล้วคุณจะไม่ได้รับความไว้วางใจให้ได้รับทรัพยากรมากมายฟรี ฉันสงสัยว่ามีใครพบความสัมพันธ์เดียวกันระหว่างการเข้าถึง GPU ที่ จำกัด และฝันร้ายของ Re-captcha อย่างที่บอกมันอาจเป็นเรื่องบังเอิญโดยสิ้นเชิงเช่นกัน


4
คำแถลงของคุณ "ในขณะที่เขียนนี้ Google ให้ GPU เพียง 5% แก่พวกเราบางคนในขณะที่คนอื่น ๆ 100% ระยะเวลา" ไม่ถูกต้อง - Colab ไม่เคยทำงานในลักษณะนี้ กรณีผู้ใช้ทั้งหมดที่ได้รับการวินิจฉัยว่าเห็น GPU RAM น้อยกว่าเต็มรูปแบบที่มีให้พวกเขาได้ถูกต้มไปสู่กระบวนการอื่น (เริ่มโดยผู้ใช้คนเดียวกันอาจอยู่ในโน้ตบุ๊กเครื่องอื่น) โดยใช้ RAM ที่เหลือของ GPU
Ami F

11
ผู้อ่านในอนาคต: หากคุณคิดว่าคุณเห็นอาการไม่พร้อมใช้งาน GPU RAM นี้หรือคล้ายกัน "รีเซ็ตเวลาทำงานทั้งหมด" ในเมนูรันไทม์จะทำให้คุณได้รับ VM ใหม่ที่รับประกันว่าจะไม่มีกระบวนการค้างที่ยังคงค้างอยู่กับ GPU RAM หากคุณยังคงพบอาการนี้ทันทีหลังจากใช้ตัวเลือกเมนูนั้นโปรดแจ้งข้อบกพร่องที่github.com/googlecolab/colabtools/issues
Ami F

ความเป็นจริงของคุณแตกต่างอย่างชัดเจนจากความเป็นจริงของคนอื่น ๆ ที่ยังคงโหวตโพสต์นี้ในอีกหนึ่งปีต่อมาหลังจากที่สร้างขึ้น เป็นไปได้มากที่ผู้ใช้บางคนจะพบกับสิ่งที่คุณอธิบายไว้ แต่ก็ไม่ได้เป็นเช่นนั้นทั้งหมด ดังนั้นฉันไม่แน่ใจว่าคำชี้แจงของคุณช่วยตรงนี้ได้อย่างไร นอกจากนี้เมื่อมีคนถามคำถามที่แน่นอนนี้ใน repo ที่คุณแนะนำเขาได้รับคำตอบ 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 ได้ตามปกติแม้ว่า GPU RAM Free จะมีขนาด 504 MB ก็ตามซึ่งฉันคิดว่าเป็นสาเหตุของ ResourceExhaustedError ที่ฉันได้รับเมื่อคืนนี้


1
ฉันคิดว่าฉันเชื่อมต่อใหม่อาจจะ 50 ครั้งในช่วงสองสามวันและฉันก็เริ่มใช้งาน 95% เหมือนเดิมเสมอ เพียงครั้งเดียวที่ฉันเห็น 0% ในความพยายามทั้งหมดนั้นฉันได้รับ cuda จากข้อผิดพลาดของหน่วยความจำเมื่อใกล้ถึง 100%
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
ขอบคุณ แต่คำแนะนำของคุณไม่เปลี่ยนแปลงอะไรเลย ฉันยังคงได้รับ 5% ของ GPU RAM
stason

สิ่งนี้ไม่ได้ช่วยอะไร หลังจากฆ่าและเชื่อมต่อใหม่หน่วยความจำ GPU ยังคงอยู่ที่ 500Mb จาก ~ 12GB
ivan_bilan

2

ค้นหา Python3 pid และฆ่า pid โปรดดูภาพด้านล่างป้อนคำอธิบายภาพที่นี่

หมายเหตุ: ฆ่าเฉพาะ python3 (pid = 130) ไม่ใช่ jupyter python (122)


สิ่งนี้จะช่วยปัญหาหน่วยความจำได้หรือไม่ คุณไม่ฆ่าการวิ่งของคนอื่นทั้งหมดเหรอ?
ivan_bilan

สิ่งนี้ไม่ได้ช่วยมีปัญหาเดียวกัน: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

เพียงแค่ให้งานหนักกับ google colab มันจะขอให้เราเปลี่ยนเป็น ram 25 gb

ป้อนคำอธิบายภาพที่นี่

ตัวอย่างเรียกใช้รหัสนี้สองครั้ง:

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)

จากนั้นคลิกที่รับ ram เพิ่มเติม :) ป้อนคำอธิบายภาพที่นี่ ป้อนคำอธิบายภาพที่นี่

ป้อนคำอธิบายภาพที่นี่


ฉันยืนยันเรื่องนี้ได้ ฉันมีชุดข้อมูลขนาด 15 กิ๊กของรูปภาพ HD ส่วนใหญ่ (ไดรฟ์ของฉันมี 30 กิ๊กแทนที่จะเป็น 15gigs) และฉันรันโค้ดของฉันเพื่อปรับขนาดชุดข้อมูลภาพเป็น 224,224,3 และฉันเปลี่ยนไปใช้รันไทม์ RAM สูง จากนั้นเมื่อฉันเริ่มฝึกการใช้ RAM ขึ้นไปถึง 31.88gigs
Anshuman Kumar

แต่ฉันต้องการเพิ่มว่าเมื่อฉันทำงานนั้นเสร็จแล้วฉันไม่สามารถเข้าถึง GPU / TPU อื่นได้ในช่วง 24 ชั่วโมงที่ผ่านมา เป็นไปได้ว่าฉันถูกขึ้นบัญชีดำ
Anshuman Kumar

@AnshumanKumar ให้โหลดสูงในการเริ่มต้นเท่านั้นในการเปลี่ยนการกำหนดค่าคุณจะสูญเสียงานที่ทำก่อนหน้านี้ซึ่งใน ram ฉันไม่ได้ใช้การกำหนดค่าสูงเป็นเวลา 24 ชั่วโมงดังนั้นฉันจึงไม่รู้เกี่ยวกับการขึ้นบัญชีดำ
Jainil Patel

ใช่มันเกิดขึ้นกับฉัน อย่างไรก็ตามงานเสร็จแล้ว
Anshuman Kumar

2

ฉันไม่แน่ใจว่าบัญชีดำนี้เป็นเรื่องจริงหรือไม่! ค่อนข้างเป็นไปได้ที่คอร์จะถูกแชร์ระหว่างผู้ใช้ ฉันทำการทดสอบด้วยและผลลัพธ์ของฉันมีดังต่อไปนี้:

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

ดูเหมือนว่าฉันจะได้รับคอร์เต็มรูปแบบด้วย อย่างไรก็ตามฉันวิ่งไปสองสามครั้งและได้ผลลัพธ์แบบเดียวกัน บางทีฉันจะตรวจสอบซ้ำสองสามครั้งในระหว่างวันเพื่อดูว่ามีการเปลี่ยนแปลงหรือไม่


1

ฉันเชื่อว่าหากเราเปิดโน้ตบุ๊กไว้หลายเครื่อง เพียงแค่ปิดมันไม่ได้หยุดกระบวนการ ฉันยังคิดไม่ออกว่าจะหยุดมันอย่างไร แต่ฉันใช้ top เพื่อค้นหา PID ของ python3 ที่ทำงานนานที่สุดและใช้หน่วยความจำส่วนใหญ่และฉันก็ฆ่ามัน ทุกอย่างกลับมาเป็นปกติแล้ว


0

การจัดสรรทรัพยากร Google Colab เป็นแบบไดนามิกโดยพิจารณาจากการใช้งานในอดีตของผู้ใช้ สมมติว่าเมื่อเร็ว ๆ นี้ผู้ใช้ใช้ทรัพยากรมากขึ้นและเป็นผู้ใช้ใหม่ที่ไม่ค่อยใช้งาน Colab ผู้ใช้จะได้รับความพึงพอใจในการจัดสรรทรัพยากรมากกว่า

ดังนั้นเพื่อให้ได้ประโยชน์สูงสุดจาก Colab ให้ปิดแท็บ Colab และเซสชันที่ใช้งานอื่น ๆ ทั้งหมดรีเซ็ตรันไทม์ของรายการที่คุณต้องการใช้ คุณจะได้รับการจัดสรร GPU ที่ดีขึ้นอย่างแน่นอน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.