Google Colab:怎么不花钱用GPU?

2021/06/30 深度学习 共 4091 字,约 12 分钟

这篇笔记解决一个问题:需要GPU训练模型(模型本身不大)又没卡怎么办?

我也是初入这个坑,使用Google Colab两次,一次是做CS224N的Assignment 4——一个机器翻译模型,tutorial上用的是Azure的虚拟机,估计4h左右。本来我也想步后尘,毕竟Azure有新人优惠,注册成功后什么也没做,就被扣了1美元(忘了说注册需要有信用卡,印象里还得是双币的),并且发现新人优惠的范围里根本没有要用的机器,因此我怒而转投Google Colab。我用Google Colab很幸运地提前meet了requiements,2h多结束了训练。第二次是这个例子,跑了一个Github上关系-实体抽取的模型(BERT+微调),因为本地测试的数据集很小,所以也没有花很长时间。

Colab实际使用中会有断线的情况,可以刷新,看着程序还在跑,只要不是相隔时间太久,应该都没有问题。

因为我也是新手,可能有说的不对的地方,很多设置最初参考:实验室一块GPU都没有怎么做深度学习?。(其实我们实验室不是没有GPU,只是我还是研0,实在是不熟……自己用自己的舒服)

按照这篇文章设置好后,可以先看看分配了什么GPU:

!nvidia-smi
Tue Jun 22 08:53:57 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 465.27       Driver Version: 460.32.03    CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla K80           Off  | 00000000:00:04.0 Off |                    0 |
| N/A   35C    P8    26W / 149W |      0MiB / 11441MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

接下来,更改目录,把当前目录更改为云盘上的目录:

import os
os.chdir('drive/MyDrive/Entity-Relation-Extraction')

查看Google Colab预装的Python, Tensorflow版本号:

!python --version
Python 3.7.10
import tensorflow as tf
tf.__version__
'2.5.0'

可以看到tensorflow版本是2.5.0,python版本是3.7.10。

而这个项目支持:python 3.6+,Tensorflow 1.12.0+。起初我在本地用Tensorflow 2.X跑,报错后将旧API更改为新API,发现太多地方要改,如果直接把import tensorflow as tf改为import tensorflow.compat.v1 as tf后仍然还有报错,TF2.X和TF1.X根本不兼容。鉴于这样做太麻烦,我还是考虑安装历史版本。也难怪现在大家都用Pytorch,Tensorflow这点真是可以让不懂编程的人都大呼离谱的程度,我还不知道有不向下兼容的产品呢。

下一段代码可以安装历史版本:

%tensorflow_version 1.x
import tensorflow as tf
tf.__version__
TensorFlow 1.x selected.





'1.15.2'

这段代码必须重启后运行才有效,所以必须重启kernel,然后运行这段代码,这时不要再运行上一段看tensorflow版本的代码了(说的就是一键重启+运行所有的我)。

在Google Colab上运行终端命令,只要在语句前加!就可以。

!python run_predicate_classification.py \
--task_name=SKE_2019 \
--do_train=true \
--do_eval=false \
--data_dir=bin/predicate_classifiction/classification_data \
--vocab_file=pretrained_model/chinese_L-12_H-768_A-12/vocab.txt \
--bert_config_file=pretrained_model/chinese_L-12_H-768_A-12/bert_config.json \
--init_checkpoint=pretrained_model/chinese_L-12_H-768_A-12/bert_model.ckpt \
--max_seq_length=128 \
--train_batch_size=32 \
--learning_rate=2e-5 \
--num_train_epochs=6.0 \
--output_dir=./output/predicate_classification_model/epochs6/
!python bin/subject_object_labeling/sequence_labeling_data_manager.py
!python run_sequnce_labeling.py \
--task_name=SKE_2019 \
--do_train=true \
--do_eval=false \
--data_dir=bin/subject_object_labeling/sequence_labeling_data \
--vocab_file=pretrained_model/chinese_L-12_H-768_A-12/vocab.txt \
--bert_config_file=pretrained_model/chinese_L-12_H-768_A-12/bert_config.json \
--init_checkpoint=pretrained_model/chinese_L-12_H-768_A-12/bert_model.ckpt \
--max_seq_length=128 \
--train_batch_size=32 \
--learning_rate=2e-5 \
--num_train_epochs=9.0 \
--output_dir=./output/sequnce_labeling_model/epochs9/

今天心情好,废话比较多。感慨一下这段时间入门的感受:看不懂很正常,一方面可能是没有前置知识,另一方面可能是对方没说人话。(看一些论文,感觉就是换个名字故弄玄虚;论文作者都会假定你已经在这个方面有一些基础,很多事情都会省略不讲,所以看不懂很正常,我是觉得不要一上来就看论文,先把基础补好,把CS224N认真看完做完作业,达到一个门槛再看论文才知道他们在说什么;另外,还有教材的问题我也想吐槽很久了,cs是实践出真知,不是靠背,很多本科教材就是概念方法的堆砌,无聊质量也低。不如认真做一个实际应用学到的多,记的牢,我已经打算把本科的课程跟着国外带实现项目的课程过一遍+做作业,把基础知识打牢。)

不要质疑自己的能力,自信起来!不要害怕请教的问题有多小白,有些人确实对他们眼里的简单问题不耐烦(这次也让我反思了自己,高中的时候虽然总是第一,但大家都不爱问我问题,我真的无意识地态度不好,因为这些问题我真的觉得没有必要问),也有的大神真的是让人如沐春风,有问必答,超级温柔(点名李沐老师,他的动手深度学习课程入门的同学都去学,真的很照顾我们)。本科时真的感受到人外有人,天外有天,一度因为自己跟不上怀疑人生,最后放弃治疗。他们的看法和成就不代表什么,也不需要比较,只有自己的进步才是实打实的,只要每天都努力进步了,就不要感到羞愧和自卑,加油往前冲就可以了!

还有一点感悟,现在的资源真的比我读本科的时候多很多,也有很多人乐于分享他们成长的经验。中文资料比当时感觉要全很多,一些公众号和博客对入门帮助很大,因为很多教材和论文不说人话,博客和公众号这种说人话的地方就很不错!我觉得关注一下很有必要!

说这么多也是希望大家少走弯路,也是记录下勉励自己吧。


2022-02-23更新:

时过境迁,Google Colab又推出了新的会员计划,伴随着的就是以前能分到T4,现在只能分到K80,根据亲测,K80性能连3060都比不过,并且Google Colab的显存分配是动态的,这意味着可能你上次运行代码不会报错,显存够用,下次就不一定了。所以想要免费使用Google Colab限制越来越多了。

文档信息

Search

    Table of Contents