Auto 您所在的位置:网站首页 阿里云找不到实例 Auto

Auto

#Auto| 来源: 网络整理| 查看: 265

CommandNotFoundError: Your shell has not been properly configured to use ‘conda activate‘.

http://t.csdn.cn/73WIC

内存和CPU的分配逻辑为按照GPU数量成倍数分配,也就是说CPU与内存的分配和GPU的分配保持一致。也即是说使用的GPU数量占总GPU数量的比例和你使用的内存和CPU占总内存和总CPU的比例保持一致

在实例中查看磁盘使用情况请在终端中执行:source /root/.bashrc

系统盘说明:

在默认状态下向无论哪个目录下写入文件,最终都是写入了磁盘A,AutoDL实例中的系统盘指的就是安装了系统的这块硬盘A,在根目录/下的任何一个地方写入文件都是写入了系统盘。但是有例外,比如还有一块全新的硬盘B,如果我们想在Linux系统下使用硬盘B,那么可以将这个硬盘设备挂载到某个目录(假设挂载的目录就是/root/autodl-tmp),此时如果向/root/autodl-tmp这个目录写入文件夹/文件,意味着是向硬盘B中写入,而不再是向硬盘A写入。

也就是如果你把新的硬盘挂载到了某个目录下,在这个目录下写入文件就会写入新的硬盘中,而不会写入系统盘中

JupyerLab的工作路径是/root,数据盘、网盘、公共数据目录都在/root目录下,因此进入JupyterLab后可直接看到这些平台默认创建的目录。

上传数据的方式:

不支持文件夹上传:JupyterLab、AutoDL

支持文件夹上传:公网网盘,直接使用阿里云盘、百度网盘上传下载数据。FileZilla软件。XShell软件。

网盘:

网盘可以将实例与实例之间的文件建立通道,并且您可以通过AutoDL网站提供的网盘文件上传入口,将文件上传到网盘中,或从网盘下载到本地。当上传文件到网盘后,所有挂载网盘的实例都能立即看到此文件。

同一地区下的实例可以共享该地区的网盘文件

网盘的使用初始化网盘

首先确定在哪个地区下租用GPU主机,然后在菜单下,初始化该地区的网盘。

可以把网盘中的数据当作特殊的文件夹进行使用。而且还可以将实例中的其他数据拷贝到网盘,给其他实例使用或在网页上查看

不同区网盘数据同步

比如:需要将北京A区的某网盘数据同步到内蒙A区的网盘中

那么:

Step.1 在内蒙A区启动一个挂载网盘的实例,其ssh指令为:ssh -p 66666 region-3.autodl.com

Step.1 在北京A区启动一个挂载网盘的实例,然后在终端中执行(这个终端指的是Auto-DL的终端,而不是本地电脑终端)

scp -rP 66666 /root/autodl-nas/xxxxx region-3.autodl.com:/root/autodl-nas/

也就是在北京A区的实例上,将网盘中的数据拷贝到远程内蒙A区的实例中(/root/autodl-nas目录就是内蒙A区的网盘)

其实就是挂载了两个外接网盘进行数据传输

注意事项:

网盘性能较数据盘差,因此想要获得更好的读数据性能,请先从网盘拷贝到autodl-tmp数据盘,再进行使用。

从网页上传数据到网盘时无需实例开机。

实例关机或释放后,网盘中的数据不受影响。

FileZilla

如果想更方便从实例上传和下载文件/文件夹,那么可以使用FileZilla:免费、全平台

1、安装

2、连接:复制自己实例的SSH指令,比如:ssh -p 50762 [email protected]

在ssh -p 50762 [email protected]命令中, 各个参数的含义为:

用户名:root

HOST: region-2.autodl.com

端口号:50762

接下来就可以拖拉拽传输文件/文件夹了

XShell

XShell是Windows系统中非常好用的远程管理软件,功能强大方便。

安装:使用教育邮箱注册,可以免费使用

使用:开机实例后,找到SSH登录指令。SSH登录指令中的端口等需要更换您的实例对应的信息

复制登录指令为(具体请以您的实例为准):ssh -p 44562 [email protected] 。由于XShell命令格式较特殊,需要您手动修改格式为: ssh [email protected] 44562 即将端口号置于末尾,无需添加-p参数。

XShell传输文件:如果已经配置了SSH登录,那么可以使用XShell提供的xftp进行文件传输

终端训练

在打开的JupyterLab页面中打开终端。如需使用其他IDE远程开发,请参考VSCode(推荐)和PyCharm

VSCode远程开发

如果使用VSCode直接执行或开终端执行训练程序,请在调试完成后最后通过screen/tmux工具开守护进程,确保程序不受SSH连接中断影响程序执行!

在AutoDL中的使用方法:

在进行操作前您需要提前安装好VSCode,此外还需要您:在AutoDL租用并开机实例,获取实例的SSH登录信息(登录指令和登录密码),本地安装VSCode远程开发插件(需配置Remote-SSH)

1.登录AutoDL选择开机的实例

获取SSH登录信息

2.本地VSCode配置Remote-SSH

打开您本地的VSCode开发插件菜单,在扩展程序中搜素Remote-SSH并安装

3.SSH连接并登录您远端租用的实例

按照图示进行点击,完成添加SSH主机

获取并复制您实例的登录信息

登录指令

图示以ssh -p 38909 [email protected]为例。回车键继续操作,注意,如果这个ssh命令的最后有空格,请删除空格,否则可能无法登录

回车后会弹出以下自定义SSH config 文件的弹窗,不需要选择直接回车即可。马上可能会弹出选择远程服务器是Windows、Linux和Mac系统的选项,请选择Linux

输入密码,等待SSH登录完成。

4.选择您的代码目录

图示代码已经上传到实例/目录中。如您还未上传资源,可以参考JupyterLab章节内容上传代码

建议: 在使用VSCode开发代码时,可根据开发语言配置相应的解释器。

PyCharm远程开发

如果使用PyCharm直接执行或开终端执行训练程序,请在调试完成后最后通过screen/tmux工具开守护进程,确保程序不受SSH连接中断影响程序执行!

远程项目开发

在AutoDL中的使用方法:

Step1:确认安装的PyCharm是专业版,只有专业版才支持远程开发功能。

Step2:开机实例

复制自己实例的SSH指令,比如:ssh -p 38076 [email protected]

在ssh -p 38076 [email protected]命令中, 各个参数的含义为:

用户名:root

HOST: region-1.autodl.com

端口号:38076

Step3:配置PyCharm

[File] -> [Settings],打开以下设置弹窗,搜索interpreter找到[Python interpreter]设置项

增加新的Python Interpreter

选择SSH Interpreter (PyCharm社区版本无该选项),然后将Host、Port与Username进行配置(所有实例的Username均为root),注意:Host后面请检查不要有空格

输入SSH的密码

配置远程Python命令地址(一般为/root/miniconda3/bin/python,如果有其他情况请使用: whereis python命令查询Python命令位置)

配置同步目录,意思是本地项目和远程实例中的哪个目录进行关联,这里设置为数据盘的地址:/root/autodl-tmp

点击结束,如果配置均无误PyCharm会有一小会配置过程,完成后即可远程开发。

如果您在运行时找不到Python文件,可能是没有自动同步代码,那么可以选择手动同步:

打开远程终端

配置好PyCharm远程开发后,可以在PyCharm的终端中下拉找到远程服务器打开远程终端:

远程Notebook开发

如果希望在PyCharm中使用实例中的算力跑Notebook,那么:

Step.1 在PyCharm中创建一个Jupyter Notebook

Step.2 在PyCharm配置Jupyter服务器

点击下面配置的服务器,不能使用托管,否则会是本地环境

由于在实例访问处点击JupyterLab打开后会立即重定向URL,因此要获取带令牌(Token)的URL链接需要先本地断网后打开JupyterLab,此时在浏览器会打开形如http://region-1.autodl.com:66666/jupyter?token=xxxxxxxxx的链接,复制该URL链接地址粘贴进去即可。

在终端中执行您的Python命令等完成训练

进阶

①GPU选型

如何排查性能瓶颈参考文档。此外需注意3060、3090、3080Ti、A4000、A5000、A40、A100、A5000等安培架构的卡需要cuda11.1及以上才能使用(TitanXp、1080Ti、2080Ti、P40、V100没有要求),请使用较高版本的框架。

性能篇

先使用nvidia-smi命令查看GPU使用率,如果GPU使用率为0优先检查代码是否调用了GPU进行计算。如果GPU使用率已经为90%+,则可以考虑换多卡并行或更高算力的GPU。

发现训练速度明显很慢时,如果担心实例本身的问题,可以复制下载测试代码尝试调整网络结构或batch size把GPU压满,如测试脚本能正常压满GPU,请按照以下方式进行排查和调优。

检查NumPy

该项中招率非常高,所以优先检查。

NumPy会使用OpenBlas或MKL做计算加速。Intel的CPU支持MKL,AMD CPU仅支持OpenBlas。如果使用Intel的CPU,MKL会比OpenBlas有几倍的性能提升(部分矩阵计算),对最终的性能影响非常大。一般来说AMD CPU使用OpenBlas会比Intel的CPU使用OpenBlas更快,因此不用过份担心AMD CPU使用OpenBlas的性能差。

如果您在使用Intel CPU,先验证自己使用的NumPy是MKL还是OpenBlas版本。

其实就是在不同品牌显卡对于某种条件下,哪个更快的问题

有以上mkl字样代表是MKL的版本。

在使用清华等国内的Conda源时,安装NumPy时默认会使用OpenBlas的加速方案,您使用conda install numpy安装时会发现如下OpenBlas相关的包:

所以为了安装MKL的NumPy,解决方法如下:

# 第一步:卸载当前的NumPy pip uninstall numpy (如果是conda安装的, conda uninstall numpy) # 第二步:删除国内的Conda源 echo "" > /root/.condarc # 第三步:重新安装NumPy conda install numpy

如果以上步骤正确,那么在install numpy时将会看到:

重装NumPy以后再次执行您的程序,查看是否性能有提升。如果不是NumPy的原因,请继续看下文:

瓶颈分析

首先确认您正在训练的模型具备什么样的特点,在性能上可以分为以下几种情况:

①小模型、数据预处理简单。比如用LeNet训练MNIST,这种情况优化的余地小,因为模型本身对算力的需求小,适合用一般的GPU来训练即可,用越好的GPU使用率会越低。这种场景GPU的使用率特点是保持在一个较低的水平,但是波动小。

②小模型、数据预处理较复杂。比如用ResNet18层网络跑ImageNet分类,这种情况CPU预处理会占用更长周期,而GPU的计算非常快占用时长短,因此适合选择更好的CPU和一般的GPU。这种场景GPU的使用率特点是波动大,峰值比较高,然后大部分时间都很低。

③大模型、数据预处理简单。这种情况一般GPU都会利用很高且波动小,但是对磁盘的要求也很高,如果利用率低那么请参考下述的方法压榨性能。

④大模型,数据预处理复杂。这种情况对CPU和GPU的要求都很高,都可能成为瓶颈,包括磁盘性能,需具体算法具体分析。

对于以上1和2两种情况,优化余地较小,更适合从选择主机下手配合代码优化,提高经济性。对于3和4如果发现GPU利用率较低时可以按下述方法排查瓶颈,优化性能。

其实就是小模型优化空间不大,大模型复杂模型优化空间会大一些

如果GPU始终没有利用率,请确认:3060、3090、3080Ti、A4000、A40、A100、A5000等安培架构的卡需要cuda11.x才能使用(最好cuda11.1及以上),请使用较高版本的框架。

Step.1 查看GPU的利用率

在终端中执行nvidia-smi -l 1命令

如果GPU占用率为0说明代码可能没有使用GPU,需检查代码。

如果GPU占用率忽高忽低或者占用率只能到50%左右,那么可能是CPU或磁盘IO出现瓶颈,请看下述步骤。

Step.2 查看CPU的占用率和内存使用情况

请在控制台 -> 我的实例中找到实例监控按钮

进去查看CPU和内存的使用:

如果内存使用较高说明可能是内存不够,此时您可以通过升配GPU(内存大小按GPU数量成比例分配)来排除该问题。

假设您的实例核心数为5,如果CPU占用率接近500%(即5个核心都正在高负载使用)那么可能是CPU数量不够,CPU出现了瓶颈,此时您可以迁移实例到更高CPU数量的主机上去或者升配。如果CPU占用率远没有达到500%的,说明您的代码没有把CPU的算力压榨出来,一般可以通过修改Dataloader中的worker_num提高CPU负载,经验值num_worker=核心数量,最好调参测试性能。(该项一般能解决80%的场景)

Step.3 查看磁盘性能

使用命令:dd if=/dev/zero of=/root/autodl-tmp/zero count=100 bs=10M

$ dd if=/dev/zero of=/root/autodl-tmp/zero.bin count=1000 bs=1M 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB, 1000 MiB) copied, 0.584865 s, 1.8 GB/s 清理测试文件 $ rm /root/autodl-tmp/zero.bin  

从输出日志中可以看出1.8GB/s的IO性能,如果IO性能低于50MB/s,说明磁盘性能较差(一般机械硬盘的IO速度为150MB/s左右),可以判断为磁盘性能较差,此时可以更换其他主机。

Step.4 检查代码

如果上述步骤都没有解决问题,那么请查看和分析您的代码,找到瓶颈所在。如果仍然无法解决,重启实例 - > 更换主机。代码层面有几种常见的影响性能的写法,请自查:

每次迭代中做一些与计算无关的操作。比如保存测试图片等等,解决办法是拉长保存测试图片的周期,不要每次迭代都做额外耗时的操作

频繁保存模型,导致保存模型占用了训练过程一定比例的时间

PyTorch的官方性能优化指南:查看

TensorFlow的官方性能优化指南:查看

其他经验

如果您在使用单机多卡并行,并且使用了PyTorch框架,那么一般将torch.nn.DataParallel (DP)更换为torch.nn.DistributedDataParallel (DDP)能提升性能。官方原文是:DistributedDataParallel offers much better performance and scaling to multiple-GPUs.

如果使用RTX 3090等安培架构的NVIDIA GPU,使用最新版本的PyTorch 1.9和1.10相比1.7会有较大的性能提升,PyTorch 1.7和1.8性能较差。(关机后在更多操作中更换PyTorch1.10的镜像)

平台使用上,如果你的算法是非常吃资源的类型,那么最好在多个实验同时调参时,选择在不同主机上开多个实例,每个实例中跑一个实验,而避免在同主机上开实例或者同实例中租多卡GPU,不同GPU分别跑实验。

AutoDL平台分配GPU、CPU、内存的机制为:按租用的GPU数量成比例分配CPU和内存,算力市场显示的CPU和内存均为每GPU分配的CPU和内存,如果租用两块GPU,那么CPU和内存就x2。此外GPU非共享,每个实例对GPU是独占的。

也就是说CPU、GPU和内存成比例分配

一. 选择CPU

CPU非常重要!尽管CPU并不直接参与深度学习模型计算,但CPU需要提供大于模型训练吞吐的数据处理能力。比如,一台8卡NVIDIA V100的DGX服务器,训练ResNet-50 ImageNet图像分类的吞吐就达到8000张图像/秒,而扩展到16卡V100的DGX2服务器却没达到2倍的吞吐,说明这台DGX2服务器的CPU已经成为性能瓶颈了。

我们通常为每块GPU分配固定数量的CPU逻辑核心。理想情况下,模型计算吞吐随GPU数量线性增长,单GPU的合理CPU逻辑核心数分配可以直接线性扩展到多GPU上。AutoDL平台的算力实例提供了多种CPU分配规格。每块GPU应配备至少4~8核心的CPU,以满足多线程的异步数据读取。分配更多的核心通常不会再有很大的收益,此时的数据读取瓶颈通常源于Python的多进程切换与数据通信开销(如使用PyTorch DataLoader)。那么怎么省钱克服数据读取瓶颈呢,不妨在AutoDL平台试试C++和CUDA编写的NVIDIA DALI数据读取加速库吧。在我们的测试中,单核CPU实例的数据读取能力就超过了基于Python的八核心实例,真正做到了为模型训练保驾护航。

通过数据读取加速库突破数据读取瓶颈

AutoDL中高性能CPU的选择有:

①内蒙A区 A5000 / 3090 / A40用到的AMD EPYC 7543 CPU

②内蒙A区 A100用到的AMD EPYC 7763 CPU

③北京A区 3090用到的Intel(R) Xeon(R) Gold 6330 或 AMD EPYC 7642 CPU

④深圳A区 3090用到的Intel(R) Xeon(R) Gold 6330

⑤服务器的CPU一般不如桌面CPU的主频高,但是核心数量多。因此您从以前使用桌面CPU切换到服务器CPU上后,需要充分利用多核心的性能,否则无法发挥服务器CPU的性能。

二. 选择GPU

AutoDL平台上提供的GPU型号很多。我们按照GPU架构大致分为五类:

①NVIDIA Pascal架构的GPU,如TitanXp,GTX 10系列等。 这类GPU缺乏低精度的硬件加速能力,但却具备中等的单精度算力。由于价格便宜,适合用来练习训练小模型(如Cifar10)或调试模型代码。

②NVIDIA Volta/Turing架构的GPU,如GTX 20系列, Tesla V100等。 这类GPU搭载专为低精度(int8/float16)计算加速的TensorCore, 但单精度算力相较于上代提升不大。我们建议在实例上启用深度学习框架的混合精度训练来加速模型计算。 相较于单精度训练,混合精度训练通常能够提供2倍以上的训练加速。

也就是说精度较低,但是混合精度训练速度块

③NVIDIA Ampere架构的GPU,如GTX 30系列,Tesla A40/A100等。 这类GPU搭载第三代TensorCore。相较于前一代,支持了TensorFloat32格式,可直接加速单精度训练 (PyTorch已默认开启)。但我们仍建议使用超高算力的float16半精度训练模型,可获得比上一代GPU更显著的性能提升。

④寒武纪 MLU 200系列加速卡。 暂不支持模型训练。使用该系列加速卡进行模型推理需要量化为int8进行计算。 并且需要安装适配寒武纪MLU的深度学习框架。

⑤华为 Ascend 系列加速卡。 支持模型训练及推理。但需安装MindSpore框架进行计算。

GPU型号的选择并不困难。对于常用的深度学习模型,根据GPU对应精度的算力可大致推算GPU训练模型的性能。AutoDL平台标注并排名了每种型号GPU的算力,方便大家选择适合自己的GPU。

根据Auto-DL平台的标注去适配自己想要的型号即可

GPU的数量选择与训练任务有关。一般我们认为模型的一次训练应当在24小时内完成,这样隔天就能训练改进之后的模型。以下是选择多GPU的一些建议:

①1块GPU。适合一些数据集较小的训练任务,如Pascal VOC等。

②2块GPU。同单块GPU,但是你可以一次跑两组参数或者把Batchsize扩大。

⑤4块GPU。适合一些中等数据集的训练任务,如MS COCO等。

⑥8块GPU。经典永流传的配置!适合各种训练任务,也非常方便复现论文结果。

⑦我要更多!用于训练大参数模型、大规模调参或超快地完成模型训练

三. 选择内存

内存在充足的情况下一般不影响性能,但是由于AutoDL的实例相比本地电脑对内存的使用有更严格的上限限制(本地电脑内存不足会使用硬盘虚拟内存,影响是速度下降),比如租用的实例分配的内存是64GB,程序在训练时最后将要使用64.1GB,此时超过限制的这一时刻进程会被系统Kill导致程序中断,因此如果对内存的容量要求大,请选择分配内存更多的主机或者租用多GPU实例。如果不确定内存的使用,那么可以在实例监控中观察内存使用情况。

AutoDL对内存的使用有更高的要求,内存不足会影响很大

GPU型号简介参考官方文档

性能实测

只看官方算力大小不完全能体现出不同GPU的差异和好坏,比如显存带宽对最终耗时也会产生较大影响,这里以深度学习典型任务为例进行实测对比。

测试说明:

①使用PyTorch=1.9.0在AutoDL不同GPU(均为单卡测试)上实测

②网络的输入为使用torch.zero在内存中构造的伪数据,因此不包含CPU预处理数据的负载和额外IO的影响,主要是GPU本身的性能占主导

③测试ResNet50和ViT Transformer两种算法。ResNet网络包含激活较多,除了本身算力,显存的带宽也对性能有较大影响。ViT Transfomer卷积多,本身算力大小占主要因素

④包含单精FP32和半精FP16(非混合精度)的测试结果,请根据自己的需要进行对比

具体的测试数据参考Auto-DL官方文档

数据上传

公网网盘(强烈推荐)

优点:

①支持实例和百度网盘、阿里云盘等直接进行数据传输(实例上传到网盘,网盘下载到实例),方便下载数据到不同实例、备份实例重要数据、迁移实例。阿里云盘在海外的传输速度依然很快,如果您在海外使用AutoDL非常推荐~

②相比本地和实例之间传输,速度快且稳定

③和其他人共享数据集

缺点:

①需要额外配置授权算一个缺点 :)

数据安全:AutoDL通过您设置的独立密码对个人信息进行加密,加密后的个人信息只有通过您的密码才能解密,包括AutoDL也无法解密。

AutoDL中公网网盘的实现可看作三方网盘客户端(叫做AutoPanel),和官方客户端的不同有:该工具为Server/Brower架构(类比JupyterLab理解,Server可以不在本地电脑,但可以在本地浏览器使用)。

与官方客户端不同,AutoPanel的Server启动在哪台主机,那么就由该主机和网盘发生上传下载交互,和浏览器所在主机无关。因此您可以更灵活的将AutoPanel的Server启动在本地电脑、AutoDL的实例(已默认启动)、或其他您自己的服务器当中,然后通过Server提供的访问地址在浏览器完成操作。

使用方法

Step.1:打开AutoPanel

租用实例开机后,在快捷工具一列找到AutoPanel入口,点击打开

Step.2:授权

第一步需要设置独立访问密码,该密码非常重要(更复杂更安全),您接下来授权的网盘个人账户信息均通过该密码进行加密。如忘记密码则需重新初始化(执行: rm -rf /root/autodl-tmp/.autodl 然后重启AutoPanel:ps -ef | grep autopanel | awk '{print $2}' | xargs kill -9)。

功能说明

①同时支持多个网盘的授权管理

②阿里云盘和百度网盘均支持断点续下载,断点上传正在支持中

③阿里云盘支持秒传

④上传下载速度一般为5~20MB/s,具体与当时网络负载有关(百度网盘与会员有关)

⑤网盘官方关键限制说明:

一. 百度网盘: 1.速度限制:与会员等级相关。实测非会员下载1MB/s, 上传10MB/s。会员上传下载10MB/s+ 2.上传路径限制:只能上传文件至[我的应用数据(部分账户叫apps)]目录,其他目录无权限。下载时无路径限制 3.上传文件大小限制: > 普通用户单个上传文件大小上限为4GB > 会员用户单个上传文件大小上限为10GB > 超级会员用户单个上传文件大小上限为20GB

二. 阿里云盘: 1.上传文件大小限制  > 普通用户单个上传文件大小上限为100GB  > 会员用户单个上传文件大小上限为200GB  > 超级会员用户单个上传文件大小上限为1TB

即将发布的功能

①支持断点上传

②AutoPanel CLI(Command Line Interface)正在测试完善,不需要Web界面也能完成上传下载等

③共享数据集(特别是对阿里云盘的共享支持,因为目前官方不支持分享压缩包等文件)

安全

AutoPanel的安全设计目标是:即使最糟糕的情况其他人拿走了您电脑上的配置信息,如果没有您的独立密码,也依然无法通过该数据访问您的网盘。

守护进程

如果你通过ssh登录或以ssh为基础的工具软件(比如XShell、PyCharm,VSCode等,可以用这类工具调试,但是最终长时间运行时请以守护进程的方式执行命令)进行远程执行程序时,那么请注意开守护进程来执行程序,避免因为SSH连接中断导致程序终止,遭受不必要的损失。

通过守护进程执行你的程序有多种方式

①screen,此外还有常用的tmux(如需安装执行:apt-get update && apt-get install -y tmux)工具,这里不做介绍

②jupyterlab的终端

③如果你使用的是Notebook,Notebook断网后日志更新问题请参考JupyterLab文档最下方

Jupyterlab

最简单的方式是通过jupyterlab的终端来执行,只要jupyterlab不出现重启(几乎不会),jupyterlab的终端就会一直运行,无论是本地主机断网还是关机。

如果你关机了这个终端tab,可以在左侧栏中找回

# 日志重定向到train.log文件。即在你的命令后加上:> train.log 2>&1 python xxx.py > train.log 2>&1 # 实时查看日志 tail -f train.log

打开时如果终端什么也不显示,按回车键即可。在使用JupyterLab长时间跑代码的过程中强烈建议对日志重定向,防止断网后中间的日志没有了。使用方法:

screen

安装screen在终端中执行:apt-get update && apt-get install -y screen

使用方法:

创建一个新的会话

终端中执行screen命令,然后在出来的界面按回车键,此时会出现一个和之前完全一样的终端(实际上是两个)。

此时在这个终端中执行的程序意味着会受到这个会话保护,比如在这里执行命令:

echo "defencoding GBK" >>  ~/.screenrc echo "encoding UTF-8 GBK" >>  ~/.screenrc

如果使用screen打开终端后中文乱码,执行以下命令后重新进入screen终端:

echo "defencoding GBK" >>  ~/.screenrc echo "encoding UTF-8 GBK" >>  ~/.screenrc

离开会话

在用screen打开的终端中使用快捷键:ctl + a + d,会退出到原终端,并且显示detached,意味着这个会话只是离开并未退出。

重进入会话

先找到所有离开的会话:

然后恢复到对应的会话:

执行完以上命令,我们会发现最开始执行的ping www.baidu.com仍然在执行。因此就可以将我们的程序放在screen的会话中执行,然后离开会话,等我们需要看日志时再恢复到这个会话中。

退回会话

在用screen打开的终端中使用快捷键:ctl + d。如果有正在执行的程序,先ctrl + c终止程序

screen乱码问题

加上-U参数即可,比如

新建:screen -U 恢复:screen -U -r xxx

环境配置

平台所有镜像的系统版本为Ubuntu,多数为Ubuntu 18.04 ,少数Ubuntu 20.04

平台已经内置了以下框架及版本的镜像,使用该镜像的实例就会自带相应框架软件。如果以下自带的框架版本或Python版本不满足需求,请继续看下方配置其他版本的框架或Python方法。(参考官方文档)

①安装其他版本的Python: 参考

②安装其他版本的CUDA: 参考

③安装PyTorch: 参考

④安装TensorFlow: 参考

(参考官方文档)

推荐的使用姿势:

①首先平台镜像中有没有您需要的Torch、TensorFlow等框架的相应版本,如果有首选平台内置的镜像

②如果平台中没有合适的Torch、TensorFlow等框架版本,那么查询自己的框架需要什么CUDA版本,比如PyTorch=1.9.0需要CUDA=11.1,那么可以选择Miniconda/CUDA=11.1的平台镜像,然后在镜像内安装自己需要的框架,免去安装cudatoolkit的麻烦。(平台内置的CUDA均带.h头文件,如有二次编译代码的需求更方便)

③如果以上条件都不满足,则可随便挑选一个Miniconda镜像,在开机后自行安装相关框架、CUDA、甚至其他版本的Python。

git克隆代码

如果在使用过程中出现Git Clone失败或非常慢的情况,那么可以使用Git代理。推荐使用: FastGit

FastGit核心用法

关于 FastGit 的使用,本质上与 git 有关。常规的面向 GitHub 的 clone 命令可能如下:

git clone https://github.com/author/repo

使用 FastGit 时,可使用如下命令:

git clone https://hub.fastgit.xyz/author/repo

FastGit 仅仅是 GitHub 的代理,所以我们仅需要替换远程地址。

当然,您也可以直接修改 git 的配置,使用 FastGit 替换所有指向 GitHub 的链接:

git config --global url."https://hub.fastgit.xyz/".insteadOf "https://github.com/" git config protocol.https.allow always

其他地址的代理(参考官方文档)

Linux基础

在AutoDL租用实例的系统默认为Linux Ubuntu发行版,因此熟悉使用基本的Linux命令对于训练模型非常有必要。以下为常用必备命令使用介绍:

列出文件/文件夹

命令:ls (list)

user@host:/tmp/test_dir# ls    # 列出当前目录下的文件和文件夹 a.txt  b user@host:/tmp/test_dir# ls -l  # 列出文件和文件夹的详细信息:权限,Owner,Group和创建/更新时间 total 4

-rw-rw-r-- 1 root root    0 11月  9 10:50 a.txt

drwxrwxr-x 2 root root 4096 11月  9 10:50 b

新建/切换路径

新建命令:mkdir (make directory)

user@host:/tmp# mkdir test_dir   # 新建一个叫test_dir的路径 user@host:/tmp# cd test_dir/     # 进入 test_dir 路径 user@host:/tmp/test_dir#

两种特殊的目录:..、. 或写作 ../、./,../代表上一级目录,./代表当前目录。

user@host:/tmp/test_dir# cd ../test_dir/   # 上一级目录下有test_dir目录

user@host:/tmp#

查看当前路径

命令:pwd (list)

user@host:~# pwd /root/ user@host:~#

重命名、移动文件/文件夹

命令: mv (move)

user@host:/tmp# mv test_dir/ test_directory   # 将test_dir目录重命名为test_directory,文件重命名同样适用

user@host:/tmp# cd test_directory/

daiauser@hostb@seeta:/tmp/test_directory#

user@host:/tmp/test_directory# mkdir a b     # 创建两个文件夹a和b user@host:/tmp/test_directory# ls

a  b

user@host:/tmp/test_directory# mv a b/       # 将a移动到b目录下。如果b目录不存在的话,这条命令相当于将a重命名为b

user@host:/tmp/test_directory#tree

. └── b

           └── a

拷贝文件/文件夹

命令: cp (copy)

参数: -r (-r代表递归)

user@host:/tmp/test_directory# mkdir a b     # 创建两个文件夹a和b user@host:/tmp/test_directory# ls

a  b

user@host:/tmp/test_directory# cp -r a b      # 将a文件夹拷贝到b文件夹下,-r代表递归拷贝

user@host:/tmp/test_directory# tree

.

└── a

└── b

        └── a

删除文件/文件夹

命令: rm (remove)

参数: -rf (-r代表递归,-f代表强制)

user@host:/tmp/test_directory# ls

a.txt  folder

user@host:/tmp/test_directory# rm -rf folder  

user@host:/tmp/test_directory# rm -rf folder/*   # *是通配符号,这样代表folder文件夹下所有文件/文件夹

设置环境变量

命令: export

以常见的两个环境变量:PATH和LD_LIBRARY_PATH为例

1. PATH

如果你有自己安装的命令,希望暴露出来直接使用。比如miniconda中的python,如果不加环境变量一般需要写完整的路径:/x/x/x/miniconda3/bin/python,如果希望直接写python就能用到调用conda中的python指令,那么可以:

export PATH=/x/x/x/miniconda3/bin:$PATH

先解释上述命令的格式,右侧的路径可以写多个,以:分隔,$PATH表示求PATH变量的值,因为PATH环境变量以前可能已经有值,需要保留那些值不影响其他命令的使用,其次当输入了python命令时,会从PATH变量的路径下去找python可执行文件,先找到哪个就用哪个,因此:前后路径的先后顺序也很重要。

2. LD_LIBRARY_PATH

和PATH路径一样,只不过LD_LIBRARY_PATH是设置动态链接库的搜索路径。比如安装了CUDA以后,一般需要设置: export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH 、

如果要查看是否设置成功可以使用命令:env | grep PATH 进行确认

最后以上设置的环境变量只在当前terminal的上下文中有效,如果希望全局有效,那么将export命令写入文件: ~/.bashrc,然后执行:source ~/.bashrc 生效或新打开终端

编辑文本文件

命令:vim

vim的高级使用较复杂,请参考其他文档学习

压缩和解压

命令:zip、unzip、tar

zip和unzip分别正对与zip的压缩包压缩和解压,tar是Linux另外一种更通用的压缩解压工具

# zip和unzip。如果没有zip请使用apt-get update && apt-get install -y zip安装 user@host:/tmp/$ zip -r dir.zip test_directory/   # 将test_directory文件夹压缩为dir.zip文件

user@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文件解压

查看GPU信息

命令:nvidia-smi

Memory-Usage          # 内存的使用情况

408MiB / 12194MiB     # 前者408MiB代表已使用的显存,后者12194MiB代表总现存

GPU-Util              # GPU的使用率

2%                    # 使用率百分比

如果需要不停的输出GPU占用信息,那么使用nvidia-smi -l 1每隔1秒输出一次,或使用watch -n 1 nvidia-smi也是同样的效果

查看/杀死进程

查看进程命令: ps

杀死进程命令:kill(具体的看官方文档,有运行界面截图)

从ps的输出结果中根据执行的命令名称找到要杀死的进程,比如最后python tensorflow2.x-test.py命令执行的进程ID是402,因此可以:

root@container-5e3e11aeb4-948a17b1:~# kill -9 402

root@container-5e3e11aeb4-948a17b1:~#

kill后可以再次使用ps -ef确认进程是否已经结束。

查看进程的CPU和内存占用

命令:top

或使用平台提供的实例监控功能查看更为简便

如果有高负载(CPU使用率高)的情况,那么一般进程都会排在最上边,根据进程名称可以进行确认。那么这个进程占用的CPU可以通过%CPU字段读取出来,内存更复杂一些,但是一般看RES字段就够了。比如上边第一个Python进程CPU的占用率是101.4%,内存使用大小是1.796g(Tips:如果内存显示的单位和上述不同,按e键切换)

重定向日志

命令: >

user@host:/tmp# python train.py    # 一般情况下日志会输出到stdout/stderr中 Epoch.1 Iter 20

Epoch.1 Iter 40

Epoch.1 Iter 50

...

user@host:/tmp# python train.py > ./train.log 2>&1  # 把stdout/stderr中的日志重定向到train.log文件中,最后的2>&1中,2代表stderr, 1代表stdout,&1可以理解成像c语言中的求地址

user@host:/tmp# cat ./train.log    # 将train.log文件中的内容打印在stdout。cat(Concatenate FILE(s) to standard output.)

Epoch.1Iter 20

Epoch.1Iter 40

Epoch.1 Iter 50

...

user@host:/tmp$ python train.py > ./train.log 2>&1 &   # 如果最后再加一个&的效果是后台运行,还可以参考nohup的配合使用

场景1

场景:发现程序停止了,但是显存还在占用

一般这种情况是进程假死,看上去停止了但是实际还在。可以通过ps -ef查看进程是否还存在,如果存在则用kill命令杀死进程,最后用nvidia-smi检查显存是否已经释放。

场景2

场景:想把实例中的模型/数据保存在网盘中一份,方便其他实例使用

user@host:~# pwd

/root/

user@host:~# ls

train.py  autodl-tmp  autodl-nas

user@host:~# cp -r train.py autodl-nas/   # 把 train.py 文件存入网盘中

场景3

场景:发现进程内存会使用超过限制,导致进程被Killed

可以使用Top命令查看进程的占用内存情况,确认内存是不是会停留在一个值而不会一直增长,如果一直增长说明程序对内存的释放有漏洞,可以分析Python代码变量的引用来进行优化。

场景4

场景:使用JupyerLab的终端挂守护进程跑训练,担心关闭网页期间的日志看不到了

可以使用重定向日志功能,把日志写入文件

常见问题

Q: 程序卡住没有输出什么原因?

A:首先使用top和nvidia-smi命令分别查看CPU和GPU的使用率。如果CPU一直为100%且GPU无占用,那么大概率卡在了GPU调用上,那么请看上一个问题的答案。如果不是上述原因,那么需要进行代码Debug,推荐在关键代码行上print日志,然后执行程序定位程序卡在了哪一行代码语句上,根据定位的代码谷歌确认原因,这类情况也与代码本身有关,需具体原因具体分析,切忌不看代码只猜。

Q: 爆显存(CUDA OOM)什么原因?

A:如果执行程序报错OOM显存不足,那么最简单的调试办法是设置batch size=1然后逐步增大,观察跑到多大bs时OOM,以此为依据再决定升配成多卡还是换一个更大显存的卡。另外一种情况,第一次跑没有OOM,但是再次运行就OOM了,这类情况先使用nvidia-smi命令确认在未跑时显存占用,如果有占用那么说明有之前跑的残留进程需要清理掉,清理方式: ps -ef 找到进程PID,然后kill -9 PID,如果没有显存占用,那么说明程序的特性就这样,比如动态深度学习框架的显存是会发生变化的,正好在计算过程中对显存的需求超出上限。

Q: 主机的空闲GPU不足了怎么办?

A: 第一种方式:可以使用无卡模式开机,将实例中重要的数据下载等。第二种方式迁移实例。同时也可以等待该主机上GPU释放出来以后使用。

Q: 实例更换镜像后VSCode、SSH等无法链接?

A: Linux/Mac用户,删除本地known_hosts文件,执行命令:rm ~/.ssh/known_hosts文件,Windows用户删除C:/Users/当前user名字/.ssh/konwn_hosts文件。删除后重试即可。

Q: 代金券是否能用于包年包月等?

A: 部分代金券可以,请查看代金券使用范围。代金券支持叠加使用,代金券优先余额抵扣

Q: 包年包月的实例关机后,GPU会预留吗?

A: 只要在包年包月期间都会预留,随时都可以重启,不必担心GPU被其他用户占用。

Q: 一个实例中的多卡是否支持并行?

A: 同一个实例中的多卡在同一物理主机上,支持多卡并行,如需多机多卡并行请联系客服。

Q: 按量计费的实例,如果主机GPU中途价格调整,如何计费?

A: 按量计费的实例计费价格以开机时的价格为准,中途价格变化不受影响。如果重启实例,那么价格将使用最新价进行计费。

Q: 已经释放的实例还能找回数据吗?

A: 不能找回。

Q: 如果实例所在的主机出现硬盘、GPU等故障,怎么办?

A: 有两个选择:迁移实例到其他主机或等待机器维修重新上线。针对这种情况平台会做出相应的赔偿。

Q: 实例上的数据会意外损坏或丢失吗?

A: 对于实例中的本地数据盘使用的大部分为物理磁盘,无冗余备份,因此存储于本地磁盘的数据存在丢失可能性,请及时把重要的数据进行备份。对于存储于共享云盘的数据使用了多副本冗余,数据可靠性非常高。

Q: 关闭浏览器或退出登录,对于JupyterLab(Notebook)上运行的程序会受到影响吗?

A: 不会受影响,但是日志需做好保存处理,比如重定向到日志文件。详细参考官方文档

Q: 通过SSH登录执行的命令,如何确保程序不会因为连接断开而终止?

A: 推荐使用Jupyterlab的终端执行命令,或者配合screen/tmux工具进行使用。请参考官方文档守护进程小节

Q: 程序显示Killed停止是什么原因?

A: 程序占用的内存容量超了被系统终止,可以从实例的实例监控入口查看实例的内存使用变化进行确认,解决方法可以升配,实例的内存大小随GPU数量线性分配,或换一台内存更大的主机。

如果使用过程中出现问题,请首先参考Auto-DL帮助文档,这个是官方文档,如果还没能解决问题,可以去相关论坛寻找解决问题的方法。其中有一些不详细的地方是因为那个相关的图没有截下来,这时候去官方文档对应的章节找即可

Reference:

1、AutoDL帮助文档



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有