华为云ModelArts:零基础实战,从OBS存储到JupyterLab模型训练
1. 为什么选择华为云ModelArts最近在跑深度学习模型时发现自己的笔记本显卡根本扛不住。16G内存的机器跑个BERT模型直接卡死更别说训练大型图像模型了。看了看显卡价格RTX 3090都快赶上我一个月工资了。正当发愁时同事推荐了华为云的ModelArts服务。ModelArts最吸引我的是它提供的免费算力资源56G内存加上Tesla P100 16G显卡这配置比我笔记本强了不止一个档次。而且整个使用过程基本零成本只需要注册华为云账号就能用。不过第一次使用时确实踩了不少坑比如AK/SK配置错误、文件格式不对、自动关闭没保存等问题。下面我就把完整的实战经验分享给大家让你少走弯路。2. 前期准备工作2.1 注册与实名认证首先需要注册华为云账号这个过程很简单访问华为云官网点击注册填写手机号、验证码等基本信息完成企业或个人实名认证建议用个人认证流程更简单实名认证一般1-2个工作日内完成。认证通过后登录控制台在服务列表中找到ModelArts服务。这里有个小技巧建议同时开通OBS服务因为ModelArts的数据存储依赖OBS。2.2 了解费用情况虽然ModelArts提供免费算力但有些服务是收费的OBS存储服务按使用量计费1GB数据每月约0.12元模型训练免费额度用完后按小时计费其他增值服务如自动学习等建议先充值10元左右避免因欠费导致服务中断。我在使用时就是因为没注意余额结果训练到一半被强制停止了。3. 数据准备与上传3.1 创建OBS存储桶OBS是华为云的对象存储服务相当于一个云盘。使用步骤如下在华为云控制台搜索OBS点击创建桶桶名称要全局唯一地区选择离你最近的如华北-北京四其他参数保持默认即可创建完成后建议下载OBS Browser客户端比网页版上传更方便。3.2 使用OBS Browser上传数据安装OBS Browser后需要用AK/SK方式登录在华为云账号的我的凭证中获取AK/SK打开OBS Browser选择AK/SK登录输入AK、SK和自定义账号名任意即可上传数据时要注意压缩包必须用zip格式rar格式在ModelArts中无法直接解压建议将数据集放在单独的文件夹中大文件上传可能会中断可以用分段上传功能我曾经因为用了rar格式不得不重新上传所有数据浪费了两个小时。4. 创建Notebook环境4.1 选择计算资源回到ModelArts控制台点击开发环境→Notebook点击创建选择GPU免费规格镜像选择TensorFlow 1.8根据你的框架需求选择其他参数保持默认这里有个坑免费资源有限可能会遇到资源不足的情况。建议早上8点前创建成功率更高。4.2 启动JupyterLab创建完成后点击打开JupyterLab你会看到一个熟悉的界面。主要用到两个功能Notebook类似本地的Jupyter NotebookTerminal完整的Linux终端第一次启动可能需要2-3分钟。如果长时间卡在启动界面可以尝试刷新页面。5. 数据同步与模型训练5.1 从OBS同步数据在Notebook中执行以下代码同步OBS数据import moxing as mox mox.file.copy_parallel(obs://your-bucket-name/dataset/, /home/ma-user/work)这段代码会把OBS中的数据复制到Notebook的工作目录。注意路径要替换成你自己的OBS路径。5.2 开始模型训练数据同步完成后就可以像在本地一样运行代码了。几个实用技巧在Terminal中可以用pip install安装额外依赖训练过程中记得定期保存checkpoint输出文件建议先保存在工作目录再同步回OBS训练大型模型时建议使用以下代码定期保存进度import os from datetime import datetime def save_to_obs(local_path, obs_path): if not os.path.exists(local_path): os.makedirs(local_path) mox.file.copy_parallel(local_path, obs_path) # 每30分钟保存一次 if current_step % 30 0: save_to_obs(/home/ma-user/work/checkpoints, obs://your-bucket-name/checkpoints/{}.format(datetime.now().strftime(%Y%m%d_%H%M)))6. 常见问题与解决方案6.1 自动关闭问题ModelArts的免费Notebook每小时会自动关闭。解决方法训练前保存所有代码和数据使用cron定时任务定期保存中间结果重新打开后运行jupyter notebook list获取新的token我后来写了个简单的监控脚本在关闭前自动保存所有数据#!/bin/bash while true; do sleep 45m echo Auto saving... mox.file.copy_parallel(/home/ma-user/work, obs://your-bucket-name/backup) done6.2 依赖安装问题在Terminal中安装Python包时建议使用--user参数避免权限问题对于复杂环境导出requirements.txt遇到编译错误时尝试使用预编译的whl文件例如安装TensorFlow Addonspip install --user tensorflow-addons7. 最佳实践建议经过多次实践我总结出几个提高效率的方法将常用代码封装成脚本放在OBS中随时调用使用华为云提供的SDK监控资源使用情况训练大型模型时先在小样本上测试代码合理利用Terminal的多窗口功能例如可以同时打开两个Terminal窗口一个运行训练脚本另一个监控GPU状态# 窗口1 python train.py # 窗口2 watch -n 1 nvidia-smi最后提醒一点虽然ModelArts很强大但免费资源有限。如果是长期项目建议了解下付费方案或者考虑使用其他云平台的免费额度。我在完成一个NLP项目后发现华为云、阿里云和AWS的免费资源可以轮换使用这样能最大化利用各平台的优惠。