一、开通 NoteBook 实例
我们可以使用 ModelArts 的开发环境 Notebook ,也可以直接使用 ModelArts 开发工具 CodeLab,两者本质都是使用 Jupyter 。目前推荐使用 CodeLab ,毕竟可以免费“续杯”,而且是 V100 的硬件。下面分别讲解一下 Notebook 和 CodeLab 的使用。
1.1 Notebook
在 AI 开发过程中搭建开发环境、选择AI算法框架、选择算法、调试代码、安装相应软件或者硬件加速驱动库都不是容易的事情,使得学习 AI 开发上手慢门槛高。为了解决这些问题,ModelArts算法开发平台简化了整个开发过程,以降低开发门槛。 ModelArts集成了基于开源的Jupyter Notebook和JupyterLab,可为您提供在线的交互式开发调试工具。您无需关注安装配置,在ModelArts管理控制台直接使用Notebook,编写和调测模型训练代码,然后基于该代码进行模型的训练。
1.1.1 初始化 Notebook
首先我们在左侧导航栏中搜索并进入 ModelArts ,一般来说,我们常用的区域是北京四,因为北京四的版本及功能相对较新,资源也相对较多。这里为了方便演示,我选择北京四,当我们第一次使用 ModelArts 需要授权,更多说明请参考 ModelArts 准备工作[1] 。每个用户默认可创建 10 个 Notebook,其中免费算力的 CPU 和 GPU 环境各可创建 1 个 。
1.1.2 创建 Notebook
鉴于 darknet 环境需要依赖 GPU,因此我们将创建一个带有 GPU 环境的 Notebook,默认有一个免费算力的 GPU 环境,以及 5GB 的存储硬盘。
1.1.3 打开 Jupyter Lab
目前比较推荐使用 JupyterLab ,全新的、更高效的 Notebook 使用交互体检。
1.1.4 环境检查
通过 Terminal 输入 nvcc -V
和 nvidia-smi
可以查看环境信息。
1.2 CodeLab
即开即用、用于机器学习的在线集成开发环境,可以轻松的构建、训练、调试、部署机器学习算法与模型。当前使用免费规格用于体验,值得注意的是 72 小时内没用使用,会释放资源,因此需要注意文件备份。
1.2.1 开启 CodeLab
CodeLab 在 ModelArts 的总览页,属于开发工具类,目前可以免费使用。
1.2.2 切换到 GPU 环境
CodeLab 默认是 CPU 的环境,我们需要手动切换到 GPU 规格。[Free] GPU: 1*V100(32GB)|CPU: 8vCPUs 64GB 这个配置还可以吧!
1.2.3 环境检查
通过 Terminal 输入 nvcc -V
和 nvidia-smi
可以查看环境信息。(cuda版本需匹配nvidia驱动版本)
上图中 cuda 版本与 nvidia 驱动不匹配,可能会导致编译之后的 darknet 运行报错。
二、下载 darknet 源码
接着我们需要获取 darknet 的源码来进行编译, darknet 源码地址是: https://github.com/pjreddie/darknet 。由于众所周知的源码,我们可以使用镜像地址或者先将代码拉取到 Gitee 再下载到 Notebook。
2.1 git clone
本次我们直接从镜像地址获取源码:
cd work
git clone https://github.com.cnpmjs.org/pjreddie/darknet.git
2.2 检查文件
点击刷新的按钮可以查看到已经下载好的源码文件。
三、编译 darknet
在编译 darknet 之前我们需要修改 Makefile 文件。
3.1 修改Makefile文件
修改前 | 修改后 |
---|---|
GPU=0 | GPU=1 |
CUDNN=0 | CUNDD=1 |
OPENCV=0 | OPENCV=1 |
3.2 执行 make 进行编译
cd work
cd darknet
make
3.3 检查编译结果
至此,我们已经生成了可执行文件 darknet ,环境搭建完毕。接着我们试着准备数据集来验证一下
3.4 常见问题
3.4.1 make: Nothing to be done for ‘all’.
此时执行 make clean
再 make
即可。
3.4.2 darknet: ./src/cuda.c:36: check_error: Assertion `0’ failed.
这是由于 cuda 和 NVIDIA 版本不匹配。鉴于 ModelArts 的 Notebook 环境中已经安装了多个 cuda,我们可以通过脚本切换:
# 建立软链接命令
sudo ln -snf xxx
# 查看环境中有哪些cuda版本
ll /usr/local | grep cuda
# 修改cuda版本的命令,其中version替换为对应的cuda版本
sudo ln -snf /usr/local/cuda-{version} /usr/local/cuda
修改之后再执行 make 进行编译。
四、数据集处理
鉴于 darnet 需要特定的数据格式,借助脚本可以将 VOC 数据集处理成可适用的格式。
数据集见 AIGallery: https://marketplace.huaweicloud.com/markets/aihub/datasets/detail/?content_id=62ff868a-03e8-4627-a9c7-922d71aa1386
本操作指引为直接下载处理好的数据集来进行配置训练。
4.1 下载数据集到 OBS
AIGallery 提供了丰富的数据集,我们可以下载自己所需要的数据集,对于一些平台没有的数据集,我们也可以将自己的数据集上传到平台设置为私有已减轻对 OBS 存储的依赖。
4.2 通过 MoXing 下载 OBS 数据到 Notebook
MoXing 为海量数据训练提供了便利的存储服务,我们可以通过 MoXing 快速读取 OBS 中的数据。比如:
import moxing as mox
mox.file.copy_parallel('obs://huqi88/AIGallery/darknet-tools','darknet-tools')
print('Done!')
4.3 简单配置数据及训练参数
cd work
mv darknet-tools/VOC2007 darknet
mv darknet-tools/cfg/voc2007.data darknet/cfg/voc2007.data
mv darknet-tools/data/test.txt darknet/data/test.txt
mv darknet-tools/data/train.txt darknet/data/train.txt
mv darknet-tools/data/val.txt darknet/data/val.txt
mv darknet-tools/data/voc.names darknet/data/voc.names
五、训练
训练时尽量先关闭其他任务,保证有充足的资源来运行训练任务
./darknet detector train cfg/voc2007.data cfg/yolov3.cfg ../darknet-tools/darknet53.conv.74
训练过程每隔100步保存一次训练结果yolov3_100.weights,900次以后就不再保存,而是存在yolov3.backup中,在训练结束时生成yolov3_final.weights。
六、预测
上传一张测试图片 test.jpg 到 darknet 目录下,执行以下命令进行预测:
./darknet detector test cfg/voc2007.data cfg/yolov3.cfg backup/yolov3_final.weights test.jpg
结果如下图:
参考链接
[1] https://gitee.com/ModelArts/ModelArts-Lab/tree/master/docs/ModelArts准备工作