Google Colaboratory: informasi menyesatkan tentang GPU-nya (hanya 5% RAM yang tersedia untuk beberapa pengguna)

111

update: pertanyaan ini terkait dengan "Pengaturan notebook: Akselerator perangkat keras: GPU" Google Colab. Pertanyaan ini ditulis sebelum opsi "TPU" ditambahkan.

Membaca beberapa pengumuman gembira tentang Google Colaboratory yang menyediakan Tesla K80 GPU gratis, saya mencoba menjalankan pelajaran fast.ai tentangnya agar tidak pernah selesai - kehabisan memori dengan cepat. Saya mulai menyelidiki mengapa.

Intinya adalah bahwa "Tesla K80 gratis" tidak "gratis" untuk semua - untuk beberapa hanya sebagian kecil saja yang "gratis".

Saya terhubung ke Google Colab dari West Coast Kanada dan saya hanya mendapatkan 0,5GB dari apa yang seharusnya menjadi RAM GPU 24GB. Pengguna lain mendapatkan akses ke RAM GPU 11GB.

Jelas, RAM 0,5 GB GPU tidak cukup untuk sebagian besar pekerjaan ML / DL.

Jika Anda tidak yakin dengan apa yang Anda dapatkan, berikut adalah sedikit fungsi debug yang saya kumpulkan (hanya berfungsi dengan pengaturan GPU pada notebook):

# 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()

Mengeksekusinya di notebook jupyter sebelum menjalankan kode lain memberi saya:

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

Pengguna beruntung yang mendapatkan akses ke kartu penuh akan melihat:

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

Apakah Anda melihat adanya kekurangan dalam kalkulasi saya tentang ketersediaan RAM GPU, yang dipinjam dari GPUtil?

Dapatkah Anda mengonfirmasi bahwa Anda mendapatkan hasil yang serupa jika menjalankan kode ini di notebook Google Colab?

Jika perhitungan saya benar, apakah ada cara untuk mendapatkan lebih banyak RAM GPU di kotak gratis?

update: Saya tidak yakin mengapa sebagian dari kita mendapatkan 1/20 dari apa yang didapat pengguna lain. misalnya orang yang membantu saya men-debug ini dari India dan dia mendapatkan semuanya!

catatan : tolong jangan kirim saran lagi tentang cara mematikan notebook yang berpotensi macet / runaway / paralel yang mungkin menghabiskan bagian-bagian GPU. Tidak peduli bagaimana Anda mengirisnya, jika Anda berada di perahu yang sama dengan saya dan menjalankan kode debug, Anda akan melihat bahwa Anda masih mendapatkan total 5% RAM GPU (hingga pembaruan ini masih).

stason
sumber
Ada solusi untuk ini? mengapa saya mendapatkan hasil yang berbeda ketika melakukan! cat / proc / meminfo
MiloMinderbinder
Ya, masalah yang sama, hanya sekitar 500 mb ram GPU ... deskripsi menyesatkan :(
Naveen
2
Coba alat sains data sumber terbuka IBM (cognitiveclass.ai) karena mereka juga memiliki GPU gratis dengan notebook jupyter.
AQ
Saya telah mengembalikan pertanyaan ini ke keadaan di mana sebenarnya ada pertanyaan di dalamnya. Jika Anda telah melakukan lebih banyak penelitian dan menemukan jawaban, tempat yang tepat untuk itu ada di kotak jawaban. Tidak benar jika memperbarui pertanyaan dengan solusi.
Chris Hayes
@ChrisHayes, saya mengerti maksud Anda, tetapi ini tidak benar, karena rollback Anda menghapus sejumlah besar detail relevan yang sekarang hilang. Jika Anda ingin menyarankan susunan kata yang lebih baik yang lebih sesuai dengan aturan komunitas ini, harap lakukan, tetapi jika tidak, kembalikan rollback Anda. Terima kasih. ps Saya sudah memposting jawabannya .
stason

Jawaban:

42

Jadi untuk mencegah selusin jawaban yang menyarankan tidak valid dalam konteks saran utas ini ke! Kill -9 -1, mari tutup utas ini:

Jawabannya sederhana:

Saat tulisan ini dibuat, Google hanya memberikan 5% GPU kepada sebagian dari kita, sedangkan 100% kepada yang lain. Titik.

pembaruan des-2019: Masalah masih ada - suara positif pertanyaan ini masih berlanjut.

pembaruan mar-2019: Setahun kemudian seorang karyawan Google @AmiF mengomentari keadaan, menyatakan bahwa masalahnya tidak ada, dan siapa pun yang tampaknya memiliki masalah ini perlu mengatur ulang runtime mereka untuk memulihkan memori. Namun, upvote terus berlanjut, yang bagi saya ini menunjukkan bahwa masalah masih ada, meskipun saran @AmiF sebaliknya.

pembaruan des-2018: Saya memiliki teori bahwa Google mungkin memiliki daftar hitam akun tertentu, atau mungkin sidik jari browser, ketika robotnya mendeteksi perilaku non-standar. Ini bisa menjadi kebetulan total, tetapi untuk beberapa waktu saya memiliki masalah dengan Google Re-captcha di situs web mana pun yang kebetulan membutuhkannya, di mana saya harus melalui lusinan teka-teki sebelum diizinkan, sering kali membutuhkan waktu 10+ menit untuk saya capai. Ini berlangsung selama berbulan-bulan. Tiba-tiba saja pada bulan ini saya tidak mendapatkan teka-teki sama sekali dan semua captcha ulang google diselesaikan hanya dengan satu klik mouse, seperti yang dulu hampir setahun yang lalu.

Dan mengapa saya menceritakan kisah ini? Nah, karena pada saat yang sama saya diberi 100% RAM GPU di Colab . Itulah mengapa kecurigaan saya adalah bahwa jika Anda termasuk dalam daftar hitam Google teoretis maka Anda tidak dipercaya untuk diberi banyak sumber daya secara gratis. Saya ingin tahu apakah ada di antara Anda yang menemukan korelasi yang sama antara akses GPU terbatas dan mimpi buruk Re-captcha. Seperti yang saya katakan, itu bisa jadi benar-benar kebetulan juga.

stason
sumber
4
Pernyataan Anda tentang "Saat tulisan ini dibuat, Google hanya memberikan 5% GPU kepada sebagian dari kita, sedangkan 100% kepada yang lain. Titik." salah - Colab tidak pernah bekerja seperti ini. Semua kasus pengguna yang terdiagnosis yang melihat kurang dari keseluruhan RAM GPU yang tersedia bagi mereka telah beralih ke proses lain (dimulai oleh pengguna yang sama, mungkin di notebook lain) menggunakan sisa RAM GPU.
Ami F
11
Pembaca berikutnya: jika Anda merasa melihat gejala ini atau gejala serupa dari tidak tersedianya RAM GPU, "Setel ulang semua runtime" di menu Waktu Proses akan memberi Anda VM baru yang menjamin tidak ada proses usang yang masih mempertahankan RAM GPU. Jika Anda masih melihat gejala ini segera setelah menggunakan opsi menu itu, harap laporkan bug ke github.com/googlecolab/colabtools/issues
Ami F
Realitas Anda jelas berbeda dari kenyataan banyak orang lainnya yang terus memilih postingan ini setahun kemudian setelah dibuat. Sangat mungkin bahwa beberapa pengguna benar-benar menemukan apa yang Anda jelaskan, tetapi tidak semuanya. Jadi saya tidak yakin bagaimana pernyataan Anda membantu di sini. Selain itu, ketika seseorang menanyakan pertanyaan persis ini di repo yang Anda rekomendasikan, dia mendapat jawaban BS dan tiketnya ditutup: github.com/googlecolab/colabtools/issues/52
stason
2
Jika tidak jelas: Saya tidak menjelaskan apa yang saya yakini bahwa penerapannya didasarkan pada pengamatan perilaku sistem sebagai pengguna. Saya menjelaskan apa yang saya ketahui secara langsung tentang implementasinya. Saya memposting dengan harapan bahwa pengguna yang melihat ketersediaan kurang dari penuh melaporkannya sebagai masalah (baik kesalahan pengguna atau bug sistem) daripada membaca pernyataan yang salah di atas dan mengasumsikan semuanya berfungsi sebagaimana mestinya.
Ami F
1
Tidak, GPU tidak pernah dibagikan, dan tidak ada kebohongan pada contoh yang Anda tautkan (hanya tebakan dan penjelasan tentang alasan paling umum yang paling umum untuk gejala yang dilaporkan).
Ami F
22

Tadi malam saya menjalankan cuplikan Anda dan mendapatkan apa yang Anda dapatkan:

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

tapi hari ini:

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

Saya pikir alasan yang paling mungkin adalah GPU dibagikan di antara VM, jadi setiap kali Anda memulai ulang runtime Anda memiliki kesempatan untuk mengganti GPU, dan ada juga kemungkinan Anda beralih ke salah satu yang sedang digunakan oleh pengguna lain.

DIPERBARUI: Ternyata saya dapat menggunakan GPU secara normal meskipun GPU RAM Free adalah 504 MB, yang saya kira sebagai penyebab ResourceExhaustedError yang saya dapatkan tadi malam.

Nguyễn Tài Long
sumber
1
Saya pikir saya menghubungkan kembali mungkin 50 kali selama beberapa hari dan saya selalu mendapatkan penggunaan 95% yang sama untuk memulai. Hanya sekali saya melihat 0%. Dalam semua upaya itu saya mendapatkan cuda dari kesalahan memori setelah mendekati 100%.
stason
Apa yang Anda maksud dengan pembaruan Anda? Bisakah Anda tetap menjalankan sesuatu dengan 500Mb? Saya memiliki masalah yang sama, saya mendapatkanRuntimeError: cuda runtime error (2) : out of memory at /pytorch/torch/lib/THC/generated/../THCTensorMathCompare.cuh:84
ivan_bilan
6

Jika Anda menjalankan sel yang hanya memiliki
! Kill -9 -1
di dalamnya, itu akan menyebabkan semua status waktu proses Anda (termasuk memori, sistem file, dan GPU) dihapus bersih dan dimulai ulang. Tunggu 30-60-an dan tekan tombol CONNECT di kanan atas untuk menghubungkan kembali.

Ajaychhimpa1
sumber
2
terima kasih, tapi saranmu tidak mengubah apapun. Saya masih mendapatkan 5% RAM GPU.
stason
Ini tidak membantu. Setelah mematikan dan menghubungkan kembali, memori GPU masih pada 500Mb dari ~ 12GB.
ivan_bilan
4

Deskripsi yang menyesatkan di pihak Google. Kurasa aku terlalu bersemangat tentang itu. Atur semuanya, muat data, dan sekarang saya tidak dapat melakukan apa pun dengannya karena hanya memiliki memori 500Mb yang dialokasikan ke Notebook saya.

ivan_bilan
sumber
2

Temukan pid Python3 dan matikan pid. Silakan lihat gambar di bawah inimasukkan deskripsi gambar di sini

Catatan: bunuh hanya python3 (pid = 130) bukan jupyter python (122).

Manivannan Murugavel
sumber
apakah ini akan membantu dengan masalah memori? bukankah kamu membunuh semua lari orang lain?
ivan_bilan
ini tidak membantu, mendapat masalah yang sama:GPU RAM Free: 564MB
ivan_bilan
2

Mulai ulang Kernel IPython Jupyter:

!pkill -9 -f ipykernel_launcher
mkczyk.dll
sumber
1
dekat, tapi tidak ada cerutu:GPU RAM Free: 564MB
ivan_bilan
sebagai metode yang lebih sederhana untuk memulai ulang kernel, Anda cukup mengklik Runtime | Mulai ulang runtime ... atau pintasanCMD/CTRL+M
Agile Bean
2

Saya tidak yakin apakah daftar hitam ini benar! Lebih mungkin, bahwa inti dibagi di antara pengguna. Saya juga menjalankan tes, dan hasil saya adalah sebagai berikut:

Gen RAM Gratis: 12,9 GB | Ukuran Proc: 142,8 MB GPU RAM Gratis: 11441MB | Digunakan: 0MB | Gunakan 0% | Total 11441MB

Sepertinya saya juga mendapatkan inti penuh. Namun saya menjalankannya beberapa kali, dan saya mendapatkan hasil yang sama. Mungkin saya akan mengulangi pemeriksaan ini beberapa kali pada siang hari untuk melihat apakah ada perubahan.

Kregnach
sumber
2

berikan saja tugas berat ke google colab, itu akan meminta kami untuk mengubah ram 25 gb.

masukkan deskripsi gambar di sini

contoh jalankan kode ini dua kali:

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)

lalu klik dapatkan lebih banyak ram :) masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Jainil Patel
sumber
Saya bisa mengkonfirmasi ini. Saya memiliki kumpulan data 15 pertunjukan yang sebagian besar gambar HD (drive saya memiliki 30 pertunjukan, bukan 15 pertunjukan) dan saya menjalankan kode saya untuk mengubah ukuran kumpulan data gambar menjadi 224.224,3 dan saya dialihkan ke runtime RAM tinggi. Kemudian ketika saya mulai melatih penggunaan RAM naik menjadi 31.88 gigs.
Anshuman Kumar
Tetapi saya ingin menambahkan bahwa setelah saya menyelesaikan pekerjaan itu, saya belum dapat mengakses GPU / TPU lain selama 24 jam terakhir. Mungkin saja saya masuk daftar hitam.
Anshuman Kumar
@AnshumanKumar, berikan beban tinggi di awal hanya jika tidak mengubah konfigurasi Anda akan kehilangan pekerjaan yang telah dilakukan sebelumnya yang di ram. Saya tidak menggunakan konfigurasi tinggi selama 24 jam jadi saya tidak tahu tentang daftar hitam.
Jainil Patel
Ya, itu memang terjadi pada saya. Namun pekerjaan itu selesai.
Anshuman Kumar
1

Saya yakin jika kita membuka beberapa buku catatan. Hanya menutupnya tidak benar-benar menghentikan prosesnya. Saya belum menemukan cara untuk menghentikannya. Tetapi saya menggunakan atas untuk menemukan PID dari python3 yang berjalan paling lama dan menggunakan sebagian besar memori dan saya membunuhnya. Semuanya kembali normal sekarang.

Ritwik G
sumber