资讯详情

资讯详情

华为云ModelArts实操:从数据准备到模型部署全流程详解

1. 从零到一为什么我最终选择了ModelArts这条路线先说结论如果你想快速完成一个从数据到模型再到线上服务的完整闭环华为云ModelArts是目前国内云平台上最省心的一条路径没有之一。我最初接触模型训练时走的完全是“自建环境”的老路自己买GPU服务器、装CUDA、配PyTorch、调驱动版本、处理各种依赖冲突。那段时间每天最常做的事不是写模型代码而是在命令行里跟环境配置较劲。一次偶然的机会因为参加了华为ICT大赛的云赛道我第一次系统地接触了ModelArts才发现原来模型训练和部署可以像“点外卖”一样简洁——你不需要关心厨房在哪、锅碗瓢盆怎么摆只需要把菜谱训练脚本递进去就能拿到成品菜训练好的模型权重甚至还能直接帮你把菜端到桌上部署成在线API服务。这篇笔记不是官方文档的复述而是我实际跑完一个“基于公开数据集训练图像分类模型并部署上线”全流程后的真实记录。它适合三类人一是刚接触云计算、想在华为云上跑通第一个模型的初学者二是有自建训练环境经验、想迁移到云上减少运维成本的技术人三是准备参加华为ICT大赛云赛道或其他云上AI竞赛的学生。我会把每一步的关键操作、参数选择背后的原因、容易踩的坑都写清楚尽量让你照着操作就能复现整个流程。2. 准备工作账号、权限和对象存储90%的人卡在了第一步很多人以为ModelArts的学习曲线是从写训练脚本开始的实际上第一步“数据准备”才是劝退大多数人的地方。2.1 账号注册与基础授权你需要一个华为云账号这个不用多讲。真正要注意的是子账号的权限配置如果你是在团队或者学校项目中多人协作建议用统一身份认证服务IAM创建子用户并给子用户授予ModelArts的FullAccess权限和对象存储服务OBS的FullAccess权限。千万别只授ModelArts权限而忘了OBS——训练数据放在OBS里ModelArts训练任务读数据时如果没权限会报类似“Access Denied”的错误排查起来很绕。个人学习的话直接用主账号也行但要注意主账号的访问密钥AK/SK管理。在ModelArts的Notebook中读取OBS数据时推荐使用委托授权的方式而不是直接把AK/SK硬编码在代码里。在ModelArts控制台的“全局配置”中创建一个委托授予OBS的读写权限然后在Notebook中通过modelarts.session.Session()就能直接访问OBS桶代码既安全又整洁。2.2 OBS桶的规划是有讲究的OBS对象存储服务是ModelArts背后的数据存放地。训练代码、训练数据集、训练输出的模型文件全都要在OBS里有一个自己的位置。我的习惯是建这么几个路径obs://my-bucket/data/——存放原始数据集obs://my-bucket/train/——存放训练脚本和配置文件obs://my-bucket/output/——存放训练输出的模型权重和日志为什么要分得这么细因为ModelArts的训练任务支持指定train_url输出路径框架会自动把训练生成的模型文件上传到这个路径下。如果输出路径和输入数据路径混在一起或者不同任务的输出都堆叠在同一个目录后面找模型、对比版本的时候会非常痛苦。我见过有人把十几次训练的输出全部堆在一个目录里最后想找一个特定版本的模型权重翻日志翻了大半天。目录不分清楚模型版本管理就是一场灾难。2.3 创建训练桶时的地域选择创建OBS桶时区域一定要选择和ModelArts资源池相同的区域。比如你在“华北-北京四”用ModelArtsOBS桶也要选“华北-北京四”。跨区域访问不是不行但内网高速通道没有了数据上传和读取速度会明显变慢而且跨区域会产生额外的流量费用。这个问题听起来很基础但真的有人会忽略我同事第一次用ModelArts时把桶建在了别的区域训练任务跑了半小时没结束一看日志全耗在下载数据上了。数据上传方面小数据集用控制台上传即可但超过1GB的数据集强烈建议用OBS Browser工具或者obsutil命令行工具。obsutil支持断点续传500MB以上的文件传一半断了不用重新来过这在网络不稳定的环境下真是救命功能。下面是obsutil上传数据到桶的命令示例# 下载obsutil并初始化配置会要求输入AK/SK和endpoint ./obsutil config -i你的AK -k你的SK -ehttps://obs.cn-north-4.myhuaweicloud.com # 递归上传本地data目录到桶的data路径下 ./obsutil cp D:\dataset\data obs://my-bucket/data -r -f # 查看桶内文件是否上传完整 ./obsutil ls obs://my-bucket/data -r实测下来在北京四区域我的家用500Mbps宽带把5GB数据集传到OBS大约耗时3分钟左右速度很稳定。3. 核心细节解析ModelArts的三大件Notebook、训练任务、推理服务ModelArts不是单一的工具它是一整套MLOps工具链。我刚接触时最大的困惑是分不清它的几个模块分别是干什么用的总觉得功能重叠。用了一段时间后我总结出最核心的三大件ModelArts Notebook自带的JupyterLab环境适合做数据探索、代码调试、小规模实验。就是在云上开了一个带GPU的Jupyter Notebook你可以在里面像用本地一样写代码但算力在云端。ModelArts训练任务正式训练的入口把训练脚本和数据准备好在后台创建训练作业平台会启动一个计算资源集群来跑你的训练。支持单机单卡、单机多卡、多机多卡分布式训练。ModelArts推理服务部署入口把训练好的模型权重发布成一个可以直接通过HTTPS调用的API接口。支持在线推理和批量推理还能配置自动伸缩。简单类比一下Notebook是一个厨房你可以在这里洗菜切菜、尝味道调试模型训练任务是中央厨房的大锅你定好菜谱后交给它一次炒几百份正式训练推理服务则是外卖档口食客直接下单就能拿到菜线上调用API。3.1 为什么推荐先在Notebook里调试很多经验不多的人在搞训练时最容易犯的一个错误是写好训练脚本后直接提交训练任务然后等着结果。结果跑起来不到两分钟就报错看日志发现可能是数据集路径写错了、可能是维度不对、也可能是依赖库缺失一次训练作业的资源就被白白浪费了。因为ModelArts训练任务按资源使用时长计费GPU实例的单价又不便宜反复提交失败任务就是在烧钱。正确做法是先用Notebook的免费算力实例CPU或少量费用的GPU实例把脚本调试通过确认为一个小规模数据能正常跑通几个step再提交正式的训练任务。我用ModelArts的经验是Notebook里先指定一个很小的epoch数比如1个epoch再加上10步确认loss在下降、路径没问题、输出能正常写入然后再到训练任务里跑完整训练。这一条经验至少帮我省下了几百块钱的无效训练费用。3.2 镜像与依赖管理ModelArts内置了主流的AI引擎镜像比如PyTorch 1.8/1.13/2.0、TensorFlow 2.6、MindSpore等你创建Notebook或训练任务时直接选一个镜像就能用不需要自己装CUDA和cuDNN。底层驱动、CUDA版本这些都已经搭配好了对不熟悉底层环境的初学者特别友好。如果你用了内置镜像里没有的第三方Python库有两种解决办法一种是在训练脚本里加pip install命令比较粗暴但有效另一种是使用ModelArts的自定义镜像功能“基于自定义镜像创建训练作业”你可以在本地或者Notebook里把环境打包成镜像上传到容器镜像服务SWR训练时直接指定这个镜像即可。我现在的做法是把项目里所有常用的依赖打包成一个自定义镜像后面每次训练只要传脚本和数据就行不用每次花时间装包。3.3 手工创建与自动训练对比ModelArts有两种创建训练作业的方式一种是手工在控制台上填一堆参数指定算法、数据路径、输出路径、规格等另一种是使用自动学习AutoLearning你只需要上传标注好的数据系统自动选择模型结构、训练参数并生成模型适合完全没有代码经验的人。个人观点如果你是想学习或做算法研究一定要用手工创建的方式走一遍这样你才能理解每个参数的作用如果你只是业务上需要快速落地一个不太复杂的模型自动学习能大幅节省时间。我见过不少数据科学背景不深的人用自动学习在15分钟内就完成了一个垃圾桶分类模型的训练和部署效率确实高。但从学习角度跟着我本文的手工流程走一遍收获是完全不一样的。4. 实操过程跑通一个图像分类模型的完整记录下面以我实际做的一个“手写数字识别”项目为例完整展示从数据准备到部署上线的全流程。选这个项目是因为数据集处理简单MNIST、模型结构小一个简单的CNN便于把流程讲透。如果你有自己的数据集替换数据路径和脚本中的数据处理逻辑即可。4.1 训练脚本的设计要点我的训练脚本基于PyTorch框架核心代码如下这是简化后的学习版本完整版建议拆成train.py、model.py、utils.py等模块# model.py import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() self.conv1 nn.Conv2d(1, 32, kernel_size3, padding1) self.conv2 nn.Conv2d(32, 64, kernel_size3, padding1) self.fc1 nn.Linear(64 * 7 * 7, 128) self.fc2 nn.Linear(128, 10) def forward(self, x): x torch.relu(self.conv1(x)) x torch.max_pool2d(x, 2) x torch.relu(self.conv2(x)) x torch.max_pool2d(x, 2) x x.view(x.size(0), -1) x torch.relu(self.fc1(x)) return self.fc2(x)# train.py import argparse import os import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from model import SimpleCNN def main(): parser argparse.ArgumentParser() parser.add_argument(--data-url, typestr, defaultNone) parser.add_argument(--train-url, typestr, defaultNone) parser.add_argument(--epochs, typeint, default10) parser.add_argument(--batch-size, typeint, default64) parser.add_argument(--learning-rate, typefloat, default0.001) args parser.parse_args() # 准备数据 transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ]) train_dataset datasets.MNIST( rootargs.data_url, trainTrue, transformtransform, downloadTrue ) train_loader torch.utils.data.DataLoader( train_dataset, batch_sizeargs.batch_size, shuffleTrue ) # 模型与优化器 model SimpleCNN() device torch.device(cuda if torch.cuda.is_available() else cpu) model model.to(device) optimizer optim.Adam(model.parameters(), lrargs.learning_rate) criterion nn.CrossEntropyLoss() # 训练循环 model.train() for epoch in range(1, args.epochs 1): total_loss 0.0 for batch_idx, (data, target) in enumerate(train_loader): data, target data.to(device), target.to(device) optimizer.zero_grad() output model(data) loss criterion(output, target) loss.backward() optimizer.step() total_loss loss.item() if batch_idx % 100 0: print(fEpoch {epoch} Batch {batch_idx} Loss {loss.item():.6f}) avg_loss total_loss / len(train_loader) print(fEpoch {epoch} completed, Avg Loss: {avg_loss:.6f}) # 保存模型PyTorch推荐只保存state_dict os.makedirs(args.train_url, exist_okTrue) torch.save(model.state_dict(), os.path.join(args.train_url, mnist_cnn.pth)) if __name__ __main__: main()这份脚本有几个关键点说下使用argparse接收data_url和train_url这是ModelArts训练任务的标准传参方式。平台在启动训练容器时会自动注入这些参数指向你配置的数据路径和输出路径。打印阶段性loss日志后面在训练任务详情页可以看到实时输出方便观察训练是否正常收敛。模型保存只保存state_dict而不是整个模型对象。如果保存了整个model对象部署时很可能因为类定义路径不同而加载失败是个隐蔽的坑。只保存权重部署时再单独定义一个相同结构的类来加载这种方式的兼容性最好。4.2 在Notebook中创建训练作业在ModelArts控制台进入“训练管理” - “训练作业”点击“创建训练作业”。关键参数配置算法来源选择常用框架AI引擎选PyTorch版本选1.8.0及以上。代码目录填写OBS中存放训练脚本的路径比如obs://my-bucket/train/。启动文件填写train.py框架会自动从代码目录下拼接完整路径。数据来源选择OBS路径填入数据集的路径obs://my-bucket/data/。MNIST需要联网下载约10MB数据训练容器访问外网是可以的但为了稳妥我强烈建议你在Notebook里提前下载好MNIST数据再上传到OBS的data目录下。这样训练作业启动后直接读本地文件省去联网的不确定性。训练输出填写obs://my-bucket/output/模型权重会保存到这里。资源池与规格选择公有资源池按需计费。CPU或GPU取决于你的预算这个MNIST任务即使只有CPU8核也能在几分钟内跑完一个epoch但既然都上云了体验一下GPU更好我选的规格是GPU: 1*NVIDIA-V100(32GB) | CPU: 8核 | 内存: 64GB。这个规格跑我这个简单模型简直是杀鸡用牛刀但V100实例让我体会到了什么是真正的高速训练——一个epoch只需几十秒这也让我体会到了从CPU几十分钟到GPU几十秒的差距。你可以根据自己的实际数据量和业务需求选择合适的规格。训练参数这里可以不填因为我上面脚本里用了默认值如果你要指定超参数比如epochs20就在这里按格式填。提交训练作业后页面会自动跳转到训练作业列表。点击作业名称进去可以看到实时的训练日志输出。右侧有资源使用情况的图表CPU占用率、内存占用、GPU显存、GPU利用率。第一次看到GPU利用率曲线时我很直观地理解了什么叫“GPU-bound”训练——如果GPU利用率一直稳定在90%以上说明算力被充分利用了如果利用率在低位反复波动那就要检查是不是数据加载成了瓶颈。我这次训练日志里能看到类似这样的输出Epoch 1 Batch 0 Loss 2.310422 Epoch 1 Batch 100 Loss 1.987123 Epoch 1 Batch 200 Loss 1.562340 ... Epoch 10 completed, Avg Loss: 0.082314看到Avg Loss在稳步下降就可以把页面关掉等训练跑完就行。训练完成后去OBS的output路径下确认模型的mnist_cnn.pth文件是否生成成功、大小是否合理。一个简单的CNN模型权重文件大概在几百KB到几MB之间。如果训练显示成功但OBS里没有文件最可能的原因是脚本里os.makedirs(args.train_url, exist_okTrue)这行没写——本地路径不存在的目录下保存文件时会报错。4.3 部署成线上推理服务ModelArts的部署方式很简单进入“AI应用管理”-“模型管理”-“创建模型”然后部署成在线服务。在“模型管理”页面点击“导入模型”元模型来源选择“训练作业”选中刚才训练好的作业。平台会自动读取输出路径下的模型文件。需要配置推理脚本customize_service.py和配置文件config.json。ModelArts推理服务默认支持TensorFlow或PyTorch的SavedModel格式但PyTorch的.pth权重文件不是标准可以直接加载的格式需要自己写推理脚本。这是我使用的推理脚本核心代码# customize_service.py import torch from model import SimpleCNN from torchvision import transforms from PIL import Image import numpy as np class ModelService: def __init__(self, model_path): self.model SimpleCNN() self.model.load_state_dict(torch.load(model_path, map_locationcpu)) self.model.eval() self.transform transforms.Compose([ transforms.Resize((28, 28)), transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ]) def _preprocess(self, data): image data.get(image) if isinstance(image, str): # 假设传入的是base64编码的图片字符串 import base64 import io img_data base64.b64decode(image) image Image.open(io.BytesIO(img_data)).convert(L) return self.transform(image).unsqueeze(0) def inference(self, data): tensor self._preprocess(data) with torch.no_grad(): output self.model(tensor) pred torch.argmax(output, dim1).item() return {prediction: int(pred)} if __name__ __main__: # 本地测试逻辑非标准推理脚本里的必要结构 print(inference script ready)说实话第一次配置推理脚本时我翻了不少文档费了很大劲。ModelArts的官方文档里对推理脚本要求比较严里面很多模块的写法有限制比如预处理绝对不能写在__init__之外会频繁重复调用。我在这个品类上踩过不少坑后面的常见问题部分会专门展开讲。4.4 在线服务调用与自动化测试部署完成后在线服务会提供一个HTTPS的API调用地址。页面里也会给出调用指南包含请求格式和Python示例代码。调用时需要配置请求头POST /v1/infers/XXXX/api/predict/mnist-cnn Host: 模型服务域名 X-Auth-Token: 你的Token Content-Type: application/json请求体是JSON格式{ image: base64编码的图片数据 }返回结果类似{ prediction: 7 }我建议拿到API地址后第一时间写一个简单的Python脚本做批量测试我一般会从测试图片里抽出100张图逐一请求统计准确率和平均响应时间。这样做有两个好处一是验证服务部署质量二是给后续设置告警阈值提供基准数据。比如我的MNIST模型在验证集上准确率是99.2%如果调测时发现准确率远低于训练时的指标就要优先检查预处理逻辑是否和训练时一致。这个环节非常容易出问题——很多人部署后预测结果不正确不是因为模型训练得不好而是因为推理时的数据预处理尺寸缩放、归一化参数、通道顺序和训练时不一样导致出了偏差。5. 训练中的常见问题与排查技巧实录以下问题是ModelArts用户最常遇到的一些问题都是我亲身踩过或帮别人排查过的整理成速查表5.1 训练任务失败日志显示找不到文件或目录错误类型典型报错常见原因解决方案文件不存在FileNotFoundError: [Errno 2] No such file or directory脚本访问的路径不是OBS挂载进来的路径确认所有数据路径都通过args.data_url传递而不是硬编码本地路径路径权限AccessDenied委托权限不足检查全局配置中的委托是否包含OBS桶所在路径的读写权限输出目录不存在[Errno 2] No such file or directory: obs://.../output/没有先创建目录在脚本开头加os.makedirs(args.train_url, exist_okTrue)这个问题的核心在于ModelArts训练容器里的路径不是你本地的路径数据路径是一个临时挂载的OBS目录本地表现形式可能是一个类似/home/work/user-job-dir的路径输出路径同理。不能想当然地在代码里写绝对路径一切要从argparse参数里取。5.2 训练报NaN或loss异常训练过程中的一个常见异常是loss变成nan。我排查过这类问题典型的几种原因学习率过大模型参数更新幅度过大导致loss发散。尤其是刚换了一个数据集但沿用之前训练好的学习率时最容易出现。如果是Adam优化器一般learning_rate0.001是相对安全的起点如果用的是SGD则需要配合momentum学习率从0.01起步再网格搜索。数据预处理不匹配归一化时使用了错误的均值标准差可能导致输入范围异常。MNIST的归一化参数是(0.1307,), (0.3081,)如果用了ImageNet的(0.485, 0.456, 0.406)模型几乎不可能训练好。标签越界全连接输出维度小于类别数或者分类任务错误地用了回归损失函数。我在一个朋友的多分类项目里见过他把最后一层输出设为类别数减一怎么看都差一个类别排查了一下午才发现是num_classes写错了一个数字。排查思路先看loss是第一步就变nan初始化或数据问题还是训练若干步后爆发数值不稳定、学习率过大。如果是第一步就nan优先排查数据是否存在缺失值或者使用了未归一化的输入如果是中途nan降低学习率优先然后再排查网络结构里有没有不稳定的操作。5.3 部署时模型加载失败或预测结果不正确错误类型典型报错常见原因解决方案模型加载失败AttributeError: module xxx has no attribute SimpleCNN推理脚本里没有包含模型结构定义推理脚本务必复制一份model.py不能依赖训练环境中的模块预测结果全错返回结果明显不对预处理与训练时不一致对比训练/推理的resize尺寸、归一化参数、通道顺序逐项核对请求超时504 Gateway Timeout服务冷启动或请求量超过实例上限设置合理的自动伸缩策略避免高峰期实例数不足在部署加载时ModelArts会按你提供的config.json中声明的推理脚本路径来加载Python模块。如果脚本里import了训练环境中独有的模块如model.py而你没把这个文件一并放到推理代码目录里加载必然失败。最简单的方法推理代码目录里直接放一份模型结构定义文件用相对导入即可。5.4 费用控制心得ModelArts按计算资源使用时长计费。以我这次使用的V100 GPU实例为例按需价格大约在十几元每小时具体价格随资源池类型和活动变化以控制台实时价格为准。如果只是学习建议优先使用CPU实例调通脚本最后再切GPU正式训练。训练任务跑完立刻在训练作业列表“停止”作业。有人说“作业状态变成成功就自动释放资源了”这个不准确——ModelArts训练作业提交成功后资源会随任务的结束而释放但如果你提交了训练任务后没管它任务一直排队或持续运行费用会一直累计。你可以在控制台设置“训练任务自动停止”策略或者在任务完成后及时确认状态。Notebook如果不使用一定要“停止”Notebook实例长时间挂机是费用的一大来源。特别是有些同学喜欢夜里挂着Notebook跑数据第二天早上发现跑完的训练任务早就结束了但Notebook空跑了几个小时白白花了钱。合理选择规格不要训练一个几百KB的模型也申请32GB显存的高配实例按需选择GPU卡数量也是控制成本的关键。6. 进阶扩展从单机训练走向分布式和自动学习基础流程跑通之后如果你想更进一步有两条路可以走。6.1 分布式训练当你的数据集从几万张图片扩展到几百万张单卡训练时间从几小时变成几天就需要分布式训练了。ModelArts对分布式训练有很好的支持你只需要在创建训练作业时计算资源规格选择多卡类型比如“GPU: 8*NVIDIA-V100(32GB)”。训练脚本里使用PyTorch的DistributedDataParallelDDP并配合torch.distributed初始化进程组。ModelArts会设置好RANK、LOCAL_RANK、WORLD_SIZE等环境变量你按照官方的分布式示例代码改写脚本即可。坦白讲我第一次看到分布式训练的配置项时也一头雾水什么MASTER_ADDR、NODE_RANK之类的。但实际走一遍之后就会发现规律ModelArts把多机多卡的调度细节都封装好了你在脚本里只需要读取环境变量、初始化进程组然后像写单机脚本一样写前向和反向传播就行。如果你想深入学习分布式训练从ModelArts的分布式训练功能切入是一个比较温和的起点好过直接去啃裸机上的配置。6.2 自动学习ModelArts的自动学习AutoLearning对非技术背景的人可以说是非常友好。它的核心是你上传一批已经标注好的图片比如“猫”、“狗”两类系统自动完成模型结构搜索NAS、超参调优、训练和部署。不需要写一行代码全程可视化操作。我做小实验时试过一次自动学习功能——选择“图像分类”上传猫狗各100张图点击“开始训练”大约半小时后模型就完成训练并直接部署了在线服务。这套流程的背后技术点不少包括智能数据标注、超参搜索、模型蒸馏压缩等但从用户视角看你就只需要点击几次按钮。如果你需要快速验证一个AI场景的可行性自动学习绝对是个好工具。而且它还支持自动数据增强、模型压缩到边缘设备等高级功能这对产业应用来说很实用。6.3 与其他云服务的生态整合ModelArts不是孤立的训练好的模型可以联动华为云的其他服务形成完整的解决方案模型上线后配合API网关APIG可以加上流控、鉴权、负载均衡等能力生成更规范的对外开放API。配合函数工作流FunctionGraph可以实现“图片上传到OBS自动触发推理”的事件驱动架构。比如当一张新图片进入OBS桶函数自动调用已部署的推理服务把结果写回OBS或发送到通知渠道。配合应用运维管理AOM可以监控在线服务的调用量、时延、错误率设置告警规则服务异常时自动发送短信通知。如果你不只是想玩转一个模型而是想搭一个AI应用上面这些云服务之间衔接好产出的价值会远超“训练一个模型”本身。这也是在上云平台上做实践和本地单独训练一个模型之间最大的差异之一——云上的生态整合能力自带加成效果。7. 学习路线建议与最后一剂干货最后整理一下我推荐的从入门到进阶的学习节奏如果你正打算系统性学ModelArts可以按这个路线走第一周跑通Notebook完成数据加载和简单的模型调试。目标不是训练出好模型而是熟悉平台操作逻辑。第二周用手工方式训练一个模型并部署上线完整体验一遍训练到推理的流程把本文的核心步骤走通。第三周尝试改自己领域的数据集比如目标检测用YOLO或Faster R-CNN熟悉Object Detection类任务的训练脚本构造方式。如果使用MindSpore可以结合华为官方的Model Zoo模型库。第四周研究分布式训练和自动学习看能否将模型效果提升到一个新的水平同时接触一下模型的云端性能监控。还有一个小技巧送给大家在Notebook里可以用!obsutil ls obs://my-bucket/这种方式直接在代码里调用命令行工具查看OBS文件调试时非常方便。脚本调试阶段经常需要在本地和OBS之间同步小文件这种内嵌命令行的方式比切到外部终端再输入命令高效太多也不用离开Jupyter界面。再分享一个我常在团队里强调的细节训练完毕拿到模型之后别忘了在推理脚本的__init__阶段记录一下模型的元信息比如训练时间、训练集大小、最终精度等输出到日志。将来模型有问题需要排查时这些元信息能帮你快速判断这个版本是怎么回事。这个习惯我养成之后模型事故排查的效率高了不少。ModelArts这套工具链上手之后你就拥有了一个“只要负责算法逻辑不操心底层基础设施”的训练环境。数据准备、分布式训练、模型部署、弹性伸缩这些原本非常费力的环节在云上都被做成了服务。这篇笔记覆盖的内容远不是ModelArts的全部但走通了这些你已经具备了在云上推进实际AI项目的核心操作能力。后面随着你接触的业务场景变多自然会探索到更多功能——比如自动学习的智能标注、针对端侧设备的模型压缩、以及和AI Gallery里的社区模型联动等。先从一次完整的训练与部署开始吧跑通第一个成功案例后面的事都会顺利很多。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →