ModelArts 搭建 darknet 环境

胡琦 发表于 2021/07/07 01:04:02 2021/07/07
【摘要】 想学 AI ,没有本地环境怎么办?快来 AIGallery !

一、开通 NoteBook 实例

我们可以使用 ModelArts 的开发环境 Notebook ,也可以直接使用 ModelArts 开发工具 CodeLab,两者本质都是使用 Jupyter 。目前推荐使用 CodeLab ,毕竟可以免费“续杯”,而且是 V100 的硬件。下面分别讲解一下 Notebook 和 CodeLab 的使用。

1.1 Notebook

在 AI 开发过程中搭建开发环境、选择AI算法框架、选择算法、调试代码、安装相应软件或者硬件加速驱动库都不是容易的事情,使得学习 AI 开发上手慢门槛高。为了解决这些问题,ModelArts算法开发平台简化了整个开发过程,以降低开发门槛。 ModelArts集成了基于开源的Jupyter Notebook和JupyterLab,可为您提供在线的交互式开发调试工具。您无需关注安装配置,在ModelArts管理控制台直接使用Notebook,编写和调测模型训练代码,然后基于该代码进行模型的训练。
image.png

1.1.1 初始化 Notebook

首先我们在左侧导航栏中搜索并进入 ModelArts ,一般来说,我们常用的区域是北京四,因为北京四的版本及功能相对较新,资源也相对较多。这里为了方便演示,我选择北京四,当我们第一次使用 ModelArts 需要授权,更多说明请参考 ModelArts 准备工作[1] 。每个用户默认可创建 10 个 Notebook,其中免费算力的 CPU 和 GPU 环境各可创建 1 个 。

1.1.2 创建 Notebook

鉴于 darknet 环境需要依赖 GPU,因此我们将创建一个带有 GPU 环境的 Notebook,默认有一个免费算力的 GPU 环境,以及 5GB 的存储硬盘。
image.png

1.1.3 打开 Jupyter Lab

目前比较推荐使用 JupyterLab ,全新的、更高效的 Notebook 使用交互体检。
image.png

1.1.4 环境检查

通过 Terminal 输入 nvcc -Vnvidia-smi 可以查看环境信息。
image.png

1.2 CodeLab

即开即用、用于机器学习的在线集成开发环境,可以轻松的构建、训练、调试、部署机器学习算法与模型。当前使用免费规格用于体验,值得注意的是 72 小时内没用使用,会释放资源,因此需要注意文件备份。

1.2.1 开启 CodeLab

CodeLab 在 ModelArts 的总览页,属于开发工具类,目前可以免费使用。
image.png

1.2.2 切换到 GPU 环境

CodeLab 默认是 CPU 的环境,我们需要手动切换到 GPU 规格。[Free] GPU: 1*V100(32GB)|CPU: 8vCPUs 64GB 这个配置还可以吧!
image.png

1.2.3 环境检查

通过 Terminal 输入 nvcc -Vnvidia-smi 可以查看环境信息。(cuda版本需匹配nvidia驱动版本)
image.png

上图中 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

image.png

2.2 检查文件

点击刷新的按钮可以查看到已经下载好的源码文件。
image.png

三、编译 darknet

在编译 darknet 之前我们需要修改 Makefile 文件。

3.1 修改Makefile文件

修改前 修改后
GPU=0 GPU=1
CUDNN=0 CUNDD=1
OPENCV=0 OPENCV=1

image.png

3.2 执行 make 进行编译

cd work
cd darknet
make

image.png

3.3 检查编译结果

至此,我们已经生成了可执行文件 darknet ,环境搭建完毕。接着我们试着准备数据集来验证一下
image.png

3.4 常见问题

3.4.1 make: Nothing to be done for ‘all’.

此时执行 make cleanmake 即可。

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 进行编译。

image.png

四、数据集处理

鉴于 darnet 需要特定的数据格式,借助脚本可以将 VOC 数据集处理成可适用的格式。
数据集见 AIGallery: https://marketplace.huaweicloud.com/markets/aihub/datasets/detail/?content_id=62ff868a-03e8-4627-a9c7-922d71aa1386

本操作指引为直接下载处理好的数据集来进行配置训练。

4.1 下载数据集到 OBS

AIGallery 提供了丰富的数据集,我们可以下载自己所需要的数据集,对于一些平台没有的数据集,我们也可以将自己的数据集上传到平台设置为私有已减轻对 OBS 存储的依赖。

image.png

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!')

image.png

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

image.png

五、训练

训练时尽量先关闭其他任务,保证有充足的资源来运行训练任务

./darknet detector train cfg/voc2007.data cfg/yolov3.cfg ../darknet-tools/darknet53.conv.74

image.png

训练过程每隔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

结果如下图:
image.png

参考链接

[1] https://gitee.com/ModelArts/ModelArts-Lab/tree/master/docs/ModelArts准备工作

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。