start DL from stratch (2)!!!
- 一、CPU and GPU
- cpu
- GPU
- 安培架构
- 爱达·洛夫莱斯架构
- 二、使用conda创建一个新的虚拟环境
- 三、autodl操作先知
- Linux复习
- 目录
- 文件和数据上传
- 对于整个镜像的操作
- 守护进程
- Tips
- 四、autodl租用
- 创建实例
- ==<big>没有所需要的版本的话<big>==
- 连接pycharm
- 配置环境
- GitHub上项目
- 开具发票
- 五、ssh和sftp
- 六、性能
- nvidia-smi -l 1
- 如果发现GPU利用率较低时可以按下述方法排查瓶颈
- numpy
- 其余经验
主要解决DL入门关于相关软件的配置问题,使用autodl远程使用实例。
续前节 Start DL from stratch(1) !!!
一、CPU and GPU
参考:::
CPU-GPU
cpu
CPU非常重要!尽管CPU并不直接参与深度学习模型计算,但CPU需要提供大于模型训练吞吐的数据处理能力。比如,一台8卡NVIDIA V100的DGX服务器,训练ResNet-50 ImageNet图像分类的吞吐就达到8000张图像/秒,而扩展到16卡V100的DGX2服务器却没达到2倍的吞吐,说明这台DGX2服务器的CPU已经成为性能瓶颈了。
理想情况下,模型计算吞吐随GPU数量线性增长,单GPU的合理CPU逻辑核心数分配可以直接线性扩展到多GPU上。每块GPU应配备至少4~8核心的CPU,以满足多线程的异步数据读取。
GPU
我们建议在实例上启用深度学习框架的混合精度训练来加速模型计算。 相较于单精度训练,混合精度训练通常能够提供2倍以上的训练加速。
GPU的数量选择与训练任务有关。一般我们认为模型的一次训练应当在24小时内完成,这样隔天就能训练改进之后的模型。以下是选择多GPU的一些建议:
1块GPU。适合一些数据集较小的训练任务,如Pascal VOC等。
2块GPU。同单块GPU,但是你可以一次跑两组参数或者把Batchsize扩大。
4块GPU。适合一些中等数据集的训练任务,如MS COCO等。
8块GPU。经典永流传的配置!适合各种训练任务,也非常方便复现论文结果。
我要更多!用于训练大参数模型、大规模调参或超快地完成模型训练。
内存和CPU配置的分配逻辑为按GPU的数量成倍数分配,比如在主机上看到的CPU和内存分配规则为:32GB/GPU、8核/GPU,那么租用1块GPU时实例的配置为1卡GPU; 8核CPU; 32GB内存,租用2块GPU时实例的配置为2卡GPU; 16核CPU; 64GB内存,依此类推。
安培架构
NVIDIA Ampere 架构
安培架构是继图灵(Turing)架构之后的下一代架构
用于其 RTX 30 系列显卡(如 RTX 3090、RTX 3080、RTX 3070 等)。
爱达·洛夫莱斯架构
NVIDIA Ada Lovelace架构
是继安培架构之后推出的下一代 GPU 架构,命名来源于 19 世纪数学家 Ada Lovelace,她被认为是世界上第一位计算机程序员
RTX 40 系列
二、使用conda创建一个新的虚拟环境
三、autodl操作先知
Linux复习
在AutoDL租用实例的系统默认为Linux Ubuntu发行版,因此熟悉使用基本的Linux命令对于训练模型非常有必要
Linux操作系统中,几乎所有的东西都以文件夹或文件形式存在,这些文件夹/文件有一个共同的根目录/。如果我们在某块磁盘A上(无其他分区)安装了Linux操作系统后,那么根目录下将会有此类默认的系统目录:
$ ls /
bin etc lib mnt proc run tmp var boot dev home root srv sys usr
具体命令如下:::
经常去pwd + ls + tree!!!
ls # 列出当前目录下的文件和文件夹
ls -l # 列出文件和文件夹的详细信息:权限,Owner,Group和创建/更新时间
mkdir test_dir # 新建一个叫test_dir的路径
mkdir a b # 创建两个文件夹a和b
cd test_dir/ # 进入 test_dir 路径
cd …/test_dir/ # 上一级目录下有test_dir目录
pwd # 查看当前路径
mv test_dir/ test_directory # 将test_dir目录重命名为test_directory,文件重命名同样适用
mv a b/ # 将a移动到b目录下。如果b目录不存在的话,这条命令相当于将a重命名为b
cp -r a b # 将a文件夹拷贝到b文件夹下,-r代表递归拷贝
-rf folder/* # *是通配符号,这样代表remmove删除此文件夹下所有
vim # 编辑文本文件
zip和unzip。如果没有zip请使用apt-get update && apt-get install -y zip安装
user@host:/tmp/$ zip -r dir.zip test_directory/ # 将test_directory文件夹压缩为dir.zip文件
ser@host:/tmp/$ unzip dir.zip # 将dir.zip文件解压
tar. 以下参数c代表压缩,x表示解压,z代表压缩/解压为gz格式的压缩包
user@host:/tmp/$ tar czf dir.tar.gz test_directory/ # 将test_directory文件夹压缩为dir.tar.gz文件
user@host:/tmp/$ tar xzf dir.tar.gz # 将dir.tar.gz文件解压
tar还可以用于压缩和解压其他格式的压缩文件,比如bz2
user@host:/tmp/$ tar cjf dir.tar.bz2 test_directory/ # 将test_directory文件夹压缩为dir.tar.bz2文件
user@host:/tmp/$ tar xjf dir.tar.bz2 # 将dir.tar.bz2文件解压
目录
在AutoDL实例中安装的系统软件以及用内置的miniconda安装的python依赖,都是安装在了**系统盘中。 系统盘( 即系统环境 )
数据盘 temp 可存放读写IO要求高的数据 ,所以叫做数据盘,但是不能保存至镜像中以及进行实例迁移。
文件存储会挂载文件存储至实例**/root/autodl-fs**
平台内置的所有镜像都安装了Miniconda,安装路径为/root/miniconda3/
JupyerLab的工作路径是/root,数据盘、网盘、公共数据目录都在/root目录下,因此进入JupyterLab后可直接看到这些平台默认创建的目录
题外话:::JupyterLab在关闭终端/Notebook选项卡后默认不会终止,仍然在运行
所以右键复制路径之后::没有带root的,所以需要自己手动加上/root/
文件和数据上传
- 公网网盘,直接使用阿里云盘、百度网盘上传下载数据,一般推荐
(阿里云盘在2024年7月左右对三方应用进行了限制,需要购买三方权益包才能获得良好的上传下载速度
百度网盘由于规则调整,不再支持个人认证及个人创建应用功能,需要企业认证才可开通应用) - JupyterLab上传,和网盘类似,优点简单,但是只支持文件不支持文件夹 推荐
- scp命令支持文件和文件夹上传下载,由于是命令行执行,上手难度稍高
- FileZilla软件支持文件和文件夹,拖拉拽即可上传下载,推荐使用(免费、全平台(Mac、Linux、Windows))
- XShell软件支持管理SSH连接,而且集成了xftp,支持拖拉拽上传下载文件夹/文件(但是付费版软件)啊啊啊
- AutoDL文件存储 上传数据,优点简单而且不用开实例,缺点是网页不支持上传文件夹
(当只是需要上传一个zip压缩包时,或者其他类型的单个文件时,建议直接进入到文件存储中上传。因为这样可以少了连接到Xftp这个步骤,以及可以少费点钱。)
上传数据的时候选择无卡开机模式,可以减少费用
对于整个镜像的操作
您在一个实例中配置好了环境等,在更换主机以及开新的实例时希望复用该环境,以及长期留存该环境以备日后使用,那么保存镜像将是最好的选择,还支持共享镜像给其他用户之后的保存镜像请在我的镜像菜单中查看
重置系统->更换镜像,都是系统盘清空,数据盘不动
克隆实例把整个都给复制一份
点击克隆实例后,在创建实例页面选择一台新主机创建实例即可。
Tips:如果您在克隆时忘了勾选同时拷贝数据盘,那么可以在新实例创建完成后,在原实例的更多操作中点击【跨实例拷贝数据】,再对数据盘进行拷贝
守护进程
远程执行程序时,那么请注意开守护进程来执行程序,避免因为SSH连接中断导致程序终止
最简单的方式是通过jupyterlab的终端来执行,只要jupyterlab不出现重启(几乎不会),jupyterlab的终端就会一直运行,无论是本地主机断网还是关机!!!!!
Tips
- 可以在pycharm 中调试好 ,然后再 jupyterlab的终端 执行,这样页面可以关闭去做其他事情
- 按量计费实例在关机后会释放GPU给其他用户租用,如果想一直占有GPU,可选择变更计费方式为包年包月
- 有时候抢不到服务器,可以提前租用多个实例,等到15天快结束的时候开机一会,又可以延时了
- 如果在编写/调试代码、上传下载数据到实例、给他人做代码展示等不需要GPU卡场景时,可以关机后使用无卡模式开机,无卡模式开机的区别在于对于这次开机会使用0.5核;2GB内存;无GPU卡的配置,价格统一为¥0.1/小时,对于实例之前和之后的数据均无影响,今后仍然可以使用正常的模式开关机。使用方法
四、autodl租用
更多详细参考:-> Autodl
创建实例
首先平台镜像中有没有您需要的Torch、TensorFlow等框架的相应版本,如果有首选平台内置的镜像
如果平台中没有合适的Torch、TensorFlow等框架版本,那么查询自己的框架需要什么CUDA版本,比如PyTorch=1.9.0需要CUDA=11.1,那么可以选择Miniconda/CUDA=11.1的平台镜像,然后在镜像内安装自己需要的框架,免去安装cudatoolkit的麻烦。(平台内置的CUDA均带.h头文件,如有二次编译代码的需求更方便)
没有所需要的版本的话
安装其他版本的Python: 参考
安装其他版本的CUDA: 参考
安装PyTorch: 参考
安装TensorFlow: 参考
方法一:::可随便挑选一个Miniconda镜像,在开机后自行安装相关框架、CUDA、甚至其他版本的Python。(miniconda镜像即内部未安装任何深度学习框架,保持运行环境干净)
方法二:::在连接ssl的时候选择conda 环境
这个就相当于你
conda create -n Untrack python=3.7 # 构建一个虚拟环境
conda init bash && source /root/.bashrc # 更新bashrc中的环境变量
conda activate Untrack # 切换到创建的虚拟环境
注意创建位置/envs里面,此外 在编译器这里就是用的他的环境,如下:::
但是在termial中:::还是显示的base环境+root目录的
综上,所以说开始不选miniconda也是可以的,就是新建一个环境,但是在克隆实例,保存镜像什么的时候会很大的,相当与有两份了
那python interpreter 怎么换到base里面呢,还是在ssl配置那里,选择已有的base conda环境就可以了,注意路径就是图中的 /root/miniconda3
那怎么Notebook环境切换呢??
–>参考<–
# 创建Conda新的虚拟环境(如已创建,请忽略!)
conda create -n tf python=3.7 # 构建一个虚拟环境,名为:tf
conda init bash && source /root/.bashrc # 更新bashrc中的环境变量# 将新的Conda虚拟环境加入jupyterlab中
conda activate tf # 切换到创建的虚拟环境:tf
conda install ipykernel
ipython kernel install --user --name=tf # 设置kernel,--user表示当前用户,tf为虚拟环境名称
具体例子,参考我的另一篇->>>
连接pycharm
选择File—Settings,点击Add interpreter----On SSH即可。
或者 Tools -> Deployment -> Configuration点击…进入SSH Configurations
检验:::
配置环境
在PyCharm中进入终端,或者在通过JupyterLab进入终端------>>>>编辑文件+刷新,使得能使用conda的一些其他命令,比如conda activate 环境,以进行后续的环境配置
否则报错
怎么办呢::::::
输入:vim ~/.bashrc
开始进行编辑:输入i
光标移动到文件的最后一行,插入source /root/miniconda3/etc/profile.d/conda.sh
保存文件并退出:按Esc键,输入:wq,再回车
输入bash重启终端(即刷新一下)
重新输入命令:::
进来啦:::
参考AutoDL
Autodl
GitHub上项目
- 记得下面两个文件加上目录,就可以直接install
- 如果项目提供了 requirements.txt,你可以直接使用以下命令安装依赖:
pip install -r requirements.txt
- 使用 conda
若项目有 environment.yml 文件,可以用以下命令创建 conda 环境:
conda env create -f environment.yml
开具发票
发票抬头请填写真实姓名,统一社会信用代码请填写身份证号之后会发送到邮箱电子版的
单次开票金额满10元可开票
autod开具的都是具有增值税的,没有 普通的个人发票貌似嘞
五、ssh和sftp
- SSH (Secure Shell)
作用:SSH 是一种安全的远程登录协议,主要用于通过不安全的网络(例如互联网)安全地访问和管理远程计算机。它允许用户通过命令行界面(CLI)连接到远程服务器,执行命令、管理文件和执行其他管理任务。
加密:SSH 使用加密技术(如对称加密、非对称加密、哈希算法等)来确保数据传输的安全性,因此,它比传统的 Telnet 或 FTP 更加安全。
主要功能:
远程登录:使用终端在远程服务器上执行命令。
安全的文件传输:SSH 本身并不直接用于文件传输,但它可以与 SCP 或 SFTP 一起使用。 - SFTP (Secure File Transfer Protocol)
作用:SFTP 是一种通过 SSH 提供的安全文件传输协议。它用于通过安全的加密通道,在远程计算机和本地计算机之间传输文件。与 FTP 相比,SFTP 是加密的,因此数据在传输过程中不会被窃取或篡改。
加密:SFTP 使用 SSH 协议进行加密,确保传输过程中的文件和命令的保密性和完整性。
六、性能
nvidia-smi -l 1
NVIDIA System Management Interface
-l 1:是该工具的一个参数,表示以每秒 1 次的loop刷新输出
- GPU 信息:
GPU:表示 GPU 的编号。例如,GPU 0、GPU 1 等,这个编号通常是按照设备的插槽顺序分配的。
GPU-Name:显示 GPU 的具体型号,例如 Tesla T4、GeForce RTX 3090 等。
Bus-Id:表示 GPU 在系统中的 PCI 总线地址(例如 00000000:00:1E.0),可以帮助区分不同的 GPU。
Disp.A:表示是否有显示器连接到该 GPU。如果显示器连接,通常显示 On,如果没有显示器连接,显示 Off。 - GPU 使用情况:
GPU-Util:表示 GPU 的当前计算利用率,范围从 0% 到 100%。显示 GPU 在进行计算时的负载情况。如果 GPU 没有进行计算或处于空闲状态,值通常为 0%。
Memory-Usage:显示 GPU 显存的使用情况。格式通常为 XMiB / YMiB,其中 X 是已用的显存,Y 是总显存大小。例如 100MiB / 8192MiB 表示已用显存为 100MiB,总显存为 8GB。
GPU Temp:表示 GPU 当前的温度,单位是摄氏度(°C)。GPU 温度过高可能会影响性能,并且可能会自动降低性能以避免过热。
Power-Usage:显示 GPU 当前的功耗,单位为瓦特(W)。这表明 GPU 在运行时的功率消耗情况。
Fan Speed:表示 GPU 风扇的转速,单位是 RPM(转/分钟)。如果 GPU 温度过高,风扇转速通常会增大,以提供更多的冷却。 - 计算进程(Processes):
PID (Process ID):显示正在使用 GPU 的进程的 ID。每个正在运行的程序都会有一个唯一的进程 ID。
User:显示启动该进程的用户。例如,root 或 user。
GPU Memory Usage:显示该进程使用的 GPU 显存大小。例如,100MiB 表示该进程已使用了 100MB 显存。
Type:显示该进程是计算任务(C)还是显示任务(G)。例如,C 表示该进程在执行计算任务,G 表示该进程用于显示或渲染图形。
Process Name:显示该进程的名称,通常是启动该进程的应用程序的名称,如 python、tensorflow 等。
Memory-Usage:显示该进程占用的显存量。如果该值较高,表示该进程正在进行大型计算任务。 - 驱动与 CUDA 版本:
Driver Version:显示当前系统安装的 NVIDIA 驱动版本。例如,460.39 表示安装了 NVIDIA 460.39 版本的驱动。
CUDA Version:显示当前系统支持的 CUDA 版本。
如果发现GPU利用率较低时可以按下述方法排查瓶颈
如果GPU占用率为0说明代码可能没有使用GPU,需检查代码。
如果GPU占用率忽高忽低、占用率峰值在50%以下,那么可能是数据预处理跟不上GPU的处理速度 数据处理和CPU挂钩
如果CPU占用率远没有达到N00%的,说明您的代码没有把CPU的算力压榨出来,一般可以通过修改Torch Dataloader中的worker_num提高CPU负载,经验值num_worker = 略小于核心数量,最好测试不同worker num值对性能的影响。
numpy
NumPy会使用OpenBlas或MKL做计算加速。Intel的CPU支持MKL,AMD CPU仅支持OpenBlas。
如果使用Intel的CPU,MKL会比OpenBlas有几倍的性能提升(部分矩阵计算),对最终的性能影响非常大。一般来说AMD CPU使用OpenBlas会比Intel的CPU使用OpenBlas更快,因此不用过份担心AMD CPU使用OpenBlas的性能差。
在使用清华等国内的Conda源时,安装NumPy时默认会使用OpenBlas的加速方案
我的设备是:::
所以不用修改了
修改的话参考:::Pref
# 第一步:卸载当前的NumPy
pip uninstall numpy (如果是conda安装的, conda uninstall numpy)
# 第二步:删除国内的Conda源
echo "" > /root/.condarc
# 第三步:重新安装NumPy
conda install numpy
其余经验
如果您在使用单机多卡并行,并且使用了PyTorch框架,那么一般将torch.nn.DataParallel (DP)更换为torch.nn.DistributedDataParallel (DDP) 能提升性能。官方原文是:DistributedDataParallel offers much better performance and scaling to multiple-GPUs.