Colab教程(超级详细版)及Colab Pro/Colab Pro+使用评测
一、Colab介绍
Colab是什么?
Colab相关的概念
二、Colab工作流程
准备工作

新建笔记本

载入笔记本

笔记本界面
连接代码执行程序

执行代码块
# 加载云端硬盘
from google.colab import drive
drive.mount('/content/drive') # 查看分配到的GPU
gpu_info = !nvidia-smi
gpu_info = '\n'.join(gpu_info)
if gpu_info.find('failed') >= 0:
print('Not connected to a GPU')
else:
print(gpu_info) # 安装python包
!pip3 install <package>

设置笔记本的运行时类型
管理会话Session
三、Colab重要特性
资源使用的限制



如何合理使用资源?
- 将训练过后的模型日志和其他重要的文件保存到谷歌云盘,而不是本地的实例空间
- 运行的代码必须支持“断点续传”能力,简单来说就是必须定义类似checkpoint功能的函数;假设我们一共需要训练40个epochs,在第30个epoch掉线了之后模型能够从第30个epoch开始训练而不是从头再来
- 仅在模型训练时开启GPU模式,在构建模型或其他非必要情况下使用None模式
- 在网络稳定的情况下开始训练,每隔一段时间查看一下训练的情况
- 注册多个免费的谷歌账号交替使用
四、Colab项目组织
加载数据集
运行Github项目
# 克隆仓库到/content/my-repo目录下
!git clone https://github.com/my-github-username/my-git-repo.git %cd my-git-repo !./train.py --logdir /my/log/path --data_root /my/data/root --resume
from train import my_training_method
my_training_method(arg1, arg2, ...)
import sys
sys.path.append('/content/my-git-repo') # 把git仓库的目录添加到系统目录
如何处理简单项目?

五、实例演示
from google.colab import drive
drive.mount('/content/drive')
!mkdir /content/datasets !tar -xvf "/content/drive/MyDrive/zhihu_colab/ROD-synROD.tar" -C "/content/datasets"

gpu_info = !nvidia-smi
gpu_info = '\n'.join(gpu_info)
if gpu_info.find('failed') >= 0:
print('Not connected to a GPU')
else:
print(gpu_info)



!python3 /content/drive/MyDrive/zhihu_colab/mldl_project/code/train_eval.py \
--data_root /content/datasets/ROD-synROD \
--logdir /content/drive/MyDrive/ \ --
resume \
| tee /content/drive/MyDrive/synRODtoROD.txt -a
六、Colab Pro / Pro+
RAM-磁盘
|
高RAM
|
磁盘
|
后台运行
|
|
|---|---|---|---|
|
免费
|
|
66GB?
|
|
|
Pro
|
25GB
|
166GB
|
|
|
Pro+
|
52GB
|
225GB
|
|
GPU模式下会话数量
|
标准RAM
|
高RAM
|
后台运行
|
|
|---|---|---|---|
|
免费
|
1
|
|
|
|
Pro
|
2
|
1
|
|
|
Pro+
|
3
|
3
|
2(无论是否高RAM)
|
使用Pro/Pro+的个人感受


七、补充内容
如何让代码有“断点续传”的能力?
def save_checkpoint(path: Text,
epoch: int,
modules: Union[nn.Module, Sequence[nn.Module]],
optimizers: Union[opt.Optimizer, Sequence[opt.Optimizer]],
safe_replacement: bool = True):
"""
Save a checkpoint of the current state of the training, so it can be resumed.
This checkpointing function assumes that there are no learning rate schedulers or gradient scalers for automatic
mixed precision.
:param path:
Path for your checkpoint file
:param epoch:
Current (completed) epoch
:param modules:
nn.Module containing the model or a list of nn.Module objects
:param optimizers:
Optimizer or list of optimizers
:param safe_replacement:
Keep old checkpoint until the new one has been completed
:return:
""" # This function can be called both as
# save_checkpoint('/my/checkpoint/path.pth', my_epoch, my_module, my_opt)
# or
# save_checkpoint('/my/checkpoint/path.pth', my_epoch, [my_module1, my_module2], [my_opt1, my_opt2])
if isinstance(modules, nn.Module):
modules = [modules]
if isinstance(optimizers, opt.Optimizer):
optimizers = [optimizers] # Data dictionary to be saved
data = {
'epoch': epoch,
# Current time (UNIX timestamp)
'time': time.time(),
# State dict for all the modules
'modules': [m.state_dict() for m in modules],
# State dict for all the optimizers
'optimizers': [o.state_dict() for o in optimizers]
} # Safe replacement of old checkpoint
temp_file = None
if os.path.exists(path) and safe_replacement:
# There's an old checkpoint. Rename it!
temp_file = path + '.old'
os.rename(path, temp_file) # Save the new checkpoint
with open(path, 'wb') as fp:
torch.save(data, fp)
# Flush and sync the FS
fp.flush()
os.fsync(fp.fileno()) # Remove the old checkpoint
if temp_file is not None:
os.unlink(path + '.old') def load_checkpoint(path: Text,
default_epoch: int,
modules: Union[nn.Module, Sequence[nn.Module]],
optimizers: Union[opt.Optimizer, Sequence[opt.Optimizer]],
verbose: bool = True):
"""
Try to load a checkpoint to resume the training.
:param path:
Path for your checkpoint file
:param default_epoch:
Initial value for "epoch" (in case there are not snapshots)
:param modules:
nn.Module containing the model or a list of nn.Module objects. They are assumed to stay on the same device
:param optimizers:
Optimizer or list of optimizers
:param verbose:
Verbose mode
:return:
Next epoch
"""
if isinstance(modules, nn.Module):
modules = [modules]
if isinstance(optimizers, opt.Optimizer):
optimizers = [optimizers] # If there's a checkpoint
if os.path.exists(path):
# Load data
data = torch.load(path, map_location=next(modules[0].parameters()).device) # Inform the user that we are loading the checkpoint
if verbose:
print(f"Loaded checkpoint saved at {datetime.fromtimestamp(data['time']).strftime('%Y-%m-%d %H:%M:%S')}. "
f"Resuming from epoch {data['epoch']}") # Load state for all the modules
for i, m in enumerate(modules):
modules[i].load_state_dict(data['modules'][i]) # Load state for all the optimizers
for i, o in enumerate(optimizers):
optimizers[i].load_state_dict(data['optimizers'][i]) # Next epoch
return data['epoch'] + 1
else:
return default_epoch
在主程序train.py正式开始训练前,添加下面的语句:
if args.resume: # args.resume是命令行输入的参数,用于指示要不要加载上次训练的结果
first_epoch = load_checkpoint(checkpoint_path, first_epoch, net_list, optims_list)
# Save checkpoint
save_checkpoint(checkpoint_path, epoch, net_list, optims_list)
如果分到了Tesla T4怎么办?
结语:一不留神写了一万多字了!希望这个超详细的Colab教程能对大家有所帮助,大家要是发现了什么新的技巧欢迎在评论区留言~
Colab教程(超级详细版)及Colab Pro/Colab Pro+使用评测的更多相关文章
- 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...
- CentOS 6.4 服务器版安装教程(超级详细图解)
附:CentOS 6.4下载地址 32位:http://mirror.centos.org/centos/6.4/isos/i386/CentOS-6.4-i386-bin-DVD1to2.torre ...
- caffe学习--使用caffe中的imagenet对自己的图片进行分类训练(超级详细版) -----linux
http://blog.csdn.net/u011244794/article/details/51565786 标签: caffeimagenet 2016-06-02 12:57 9385人阅读 ...
- VMware Workstation 12 Pro安装CentOs图文教程(超级详细)
本文记录了VMware Workstation 12 Pro安装CentOs的整个过程,具体如下: VMware Workstation 12: CENTOS 6.4 : 创建虚拟机 1.首先安装好V ...
- CentOS 服务器版安装教程(超级详细图解)
使用安装说明:http://www.jb51.net/os/85895.html
- Navicate12激活教程(完整详细版)
写在前面 最近身边的小伙伴苦于没有Navicat12的激活工具,不能使用最新版的Navicat,鉴于此,遂将自己整理的文章贴出来,供大家参考,不过个人还是主张维护正版的意愿,如果经济实力允许的话,还是 ...
- Windows 10 + kali Linux 双系统安装教程(详细版)
准备工具如下: kali Linux 镜像 准备一4G以上的U盘 制作U盘启动盘工具- Win32DiskImager 添加引导工具-EasyBCD 留出一个空的盘,哪个盘的空间比较大可以压缩出大概2 ...
- hexo+github搭建博客(超级详细版,精细入微)
# 前言 你了解[Hexo]( https://hexo.io/zh-cn/ "Hexo官网")吗? Hexo是一个静态博客框架,基于Node.js,将Markdown文章通过渲染 ...
- cnpm的安装(超级详细版)
1. 安装node 打开黑窗口 安装node 网上教程很多,我就不加上了 2.node -v 查看node是否已安装 3.安装淘宝镜像 npm install -g cnpm -registry ...
随机推荐
- 开源.net core 验证码 - LazyCaptcha
LazyCaptcha 介绍 LazyCaptcha是仿EasyCaptcha和SimpleCaptcha,基于.Net Standard 2.1的图形验证码模块. 项目地址 效果展示 Captcha ...
- c++对c的拓展_指针的引用
套用引用公式:Type & ref =val; 假设:type 类型为int * 由公式得 int * & ref = val; // int * *const ref=&va ...
- 如何查看k8s相关日志
一.看系统日志cat /var/log/messages 二.用 kubectl 查看日志 # 注意:使用Kubelet describe 查看日志,一定要带上 命名空间,否则会报如下错误[root@ ...
- GRPC-go版本
GRPC-go版本 1.安装GO,protobuf 只适合有梯子的 GO的安装没必要说了 protobuf :https://github.com/protocolbuffers/protobuf/r ...
- Go xmas2020 学习笔记 00-03、Basic Types
00-02-Hello Example. 目录结构. 不一样的Hello World. 巧妙的单元测试. 传入os.Args切片. go mod init. 03-Basic Types. 变量类型与 ...
- Grafana插件Plugin中文汉化
示例Github地址 汉化三方插件 前面说过汉化Grafana的工作.目前在7.2.1上面,大部分已经完成.细节继续完善. 今天考虑在第三方插件上做一些汉化.点到插件一看全是英文感觉很突出.领导看到了 ...
- 2021.08.05 P5357 康托展开模板(康托展开)
2021.08.05 P5357 康托展开模板(康托展开) P5367 [模板]康托展开 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.康托展开 算法学习笔记(56): ...
- 手撸一个虚拟DOM,不错
大家好,我是半夏,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注 点赞 加我微信:frontendpicker,一起学习交流前端,成为更优秀的工程师-关注公众号:搞前端的半夏,了解更多前端知 ...
- JavaWeb和WebGIS学习笔记(四)——使用uDig美化地图,并叠加显示多个图层
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
- python基础-基本数据类型(三)
一.散列类型 散列类型用来表示无序的集合类型 1.集合(set) Python中的集合与数学符号中的集合类似,都是用来表示无序不重复元素的集合. 1.1 集合的定义 集合使用一对{}来进行定义,集合中 ...