信息整理
LeanCloud
Serverless云开发或者函数即服务对于经常需要部署的前端静态网页很有效,腾讯云阿里云相关服务使用一段时间之后需要付费,如果只是轻量的数据没有必要。如果网页是托管在其他平台,并且不想每次改一个值都要打开源码然后push到服务器,可以考虑使用。
使用教程:
More Info: https://cloud.tencent.com/developer/article/1558010
分布式训练
现在深度学习模型越来越大,一般来说使用A6000显卡显存能满足大部分科研需求,但目前能使用的只有4090,24G的显存有时确实不够挥霍。之前研究了一会分布式,在使用分布式之前其实可以先优化自己的训练代码,比如适当减小训练图像尺寸、使用混合精度训练、CPU卸载、梯度检查点等。
很多机构的HPC或者服务器集群使用slurm或者Kubernetes管理,一些指令可以用于提交job训练任务。
- hkust-gz HPC基于slurm,相关指令Link
学校智算集群还是很牛的,第一次看到的时候有点震惊Link
slurm或者Kubernetes主要还是用于运维多机多卡之间的通信协同或者容器管理等,一般不需要我们用户考虑。但是模型训练时,怎么数据并行、模型并行或者混合并行,以及多进程之间的某些任务分配,是需要用户自己设置的。
有几篇博客写的很好:
总的来说分布式训练主要分三类:
数据并行
一般用来加速训练或者对比学习需要大batch size时,一般使用
torch.nn.parallel.DistributedDataParallel就行。
主要原理就是多进程控制多GPU训练(单机多卡),但是模型在每张卡上都会复制一份,当模型大到单张卡放不下时就无法使用了,这个时候就需要模型并行或者混合并行。模型并行
模型并行一般分为流水线并行(横切)和张量并行(竖切),Megatron就使用了张量并行技术。但是一般只在模型特别大的时候才使用,其他时候用混合并行就够了。并且模型并行需要对模型文件破坏性改造,要自己切片,难度较大。
混合并行
一般使用DeepSpeed或者Megatron,推荐微软官方的DeepSpeed,基于ZeRO: Memory Optimizations Toward Training Trillion Parameter Models这篇论文。代码链接 (https://github.com/microsoft/DeepSpeed)
当年李沐大神也解读了这篇文章Link,李沐大佬自己就是这个领域的,讲的也很好理解。这篇文章微软官方也写了一篇帖子Link,里面还做了一个演示视频,非常清晰的演示了整个分布式训练的整个流程,讲的特别好。
DeepSpeed使用教程可以参考 Link,一般先使用Zero stage 1,显存不够再使用Stage 2,还不够再使用Stage 3。具体使用时有什么bug后续再来记录。
Tmux
连接服务器必用
用户与服务器的临时交互称(终端窗口)为一次会话(session),这个窗口和它的启动进程是关联的,进程会随着窗口一起关闭。某些时候网络断开,就算没有运行完会话内部的进程也被终止了,这样就找不回上一次执行的命令。
Tmux的作用将会话和窗口解绑,窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话”绑定”其他窗口,和screen相似,但screen窗口存在各种bug,tmux相比来说更好用。此外,它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
Claude code 恢复对话
- Linux or macOS
1 | claude -c # 启动 |
或者claude code中输入
- Linux or macOS
1 | /resume |
