华为云用户手册

  • 创建OBS桶 ModelArts使用 对象存储服务 (Object Storage Service,简称OBS)进行数据存储以及模型的备份和快照,实现安全、高可靠和低成本的存储需求。因此,在使用ModelArts之前通常先创建一个OBS桶,然后在OBS桶中创建文件夹用于存放数据。 本文档也以将运行代码以及输入输出数据存放OBS为例,请参考创建OBS桶,例如桶名:standard-llama2-13b。并在该桶下创建文件夹目录用于后续存储代码使用,例如:training_data。
  • 创建SFS Turbo SFS Turbo HPC型文件系统为用户提供一个完全托管的共享文件存储。SFS Turbo文件系统支持无缝访问存储在OBS对象存储桶中的对象,用户可以指定SFS Turbo内的目录与OBS对象存储桶进行关联,然后通过创建导入导出任务实现数据同步。通过OBS与SFS Turbo存储联动,可以将最新的训练数据导入到SFS Turbo,然后在训练作业中挂载SFS Turbo到容器对应ckpt目录,实现分布式读取训练数据文件。 创建SFS Turbo文件系统,详细操作指导请参考创建SFS Turbo文件系统。 图1 创建SFS Turbo 其中,文件系统类型推荐选用500MB/s/TiB或1000MB/s/TiB,应用于AI大模型场景中。存储容量推荐使用 6.0~10.8TB ,以存储更多模型文件。 图2 SFS类型和容量选择
  • ModelArts网络关联SFS Turbo OBS-SFS Turbo联动方案涉及VPC、SFS Turbo HPC型文件系统、OBS对象存储服务和ModelArts资源池。如果要使用训练作业挂载SFS Turbo功能,则需要配置ModelArts和SFS Turbo间网络直通,以及配置ModelArts网络关联SFS Turbo。 具体操作请参见配置ModelArts和SFS Turbo间网络直通。 图3 ModelArts网络关联SFS Turbo
  • 查看日志和性能 单击作业详情页面,则可查看训练过程中的详细信息。 图1 查看训练作业 在作业详情页的日志页签,查看最后一个节点的日志,其包含“elapsed time per iteration (ms)”数据,可换算为tokens/s/p的性能数据。 吞吐量(tokens/s/p):global batch size*seq_length/(总卡数*elapsed time per iteration)*1000,其global batch size(GBS)、seq_len(SEQ_LEN)为训练时设置的参数 loss收敛情况:日志里存在lm loss参数 ,lm loss的值随着训练迭代周期持续性减小,并逐渐趋于稳定平缓。 图2 查看日志和性能 父主题: 主流开源大模型基于Standard适配PyTorch NPU训练指导(6.3.905)
  • Notebook中安装依赖包并保存镜像 在后续训练步骤中,训练作业启动命令中包含sh scripts/install.sh,该命令用于git clone完整的代码包和安装必要的依赖包,每次启动训练作业时会执行该命令安装。 您可以在Notebook中导入完代码之后,在Notebook运行sh scripts/install.sh命令提前下载完整代码包和安装依赖包,然后使用保存镜像功能。后续训练作业使用新保存的镜像,无需每次启动训练作业时再次下载代码包以及安装依赖包,可节约训练作业启动时间。 由于训练启动命令也会执行sh scripts/install.sh安装依赖包,因此Notebook保存镜像为可选操作。
  • 创建Notebook 创建开发环境Notebook实例,具体操作步骤请参考创建Notebook实例。 镜像选择已注册的自定义镜像,资源类型选择创建好的专属资源池,规格推荐选择“Ascend: 8*ascend-snt9b”。 图1 Notebook中选择自定义镜像与规格 存储配置选择“弹性文件服务SFS”,并且选择已创建的SFS Turbo实例。如果该SFS Turbo多人共用,则推荐用户编辑“子目录挂载”,创建自己的子目录进行划分。 图2 Notebook中选择弹性文件服务
  • 数据集下载 本教程使用Alpaca数据集,数据集的介绍及下载链接如下。 Alpaca数据集是由OpenAI的text-davinci-003引擎生成的包含52k条指令和演示的数据集。这些指令数据可以用来对语言模型进行指令调优,使语言模型更好地遵循指令。 预训练使用的Alpaca数据集下载:https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet,数据大小:24M左右。 SFT和LoRA微调使用的Alpaca数据集下载:https://huggingface.co/datasets/QingyiSi/Alpaca-CoT/blob/main/alpacaGPT4/alpaca_gpt4_data.json,数据大小:43.6 MB。
  • 自定义数据 用户也可以自行准备训练数据。数据要求如下: 使用标准的.json格式的数据,通过设置--json-key来指定需要参与训练的列。 请注意huggingface中的数据集具有如下this格式。可以使用–json-key标志更改数据集文本字段的名称,默认为text。在维基百科数据集中,它有四列,分别是id、url、title和text。可以指定–json-key标志来选择用于训练的列。 { 'id': '1', 'url': 'https://simple.wikipedia.org/wiki/April', 'title': 'April', 'text': 'April is the fourth month...' }
  • 创建SFS Turbo SFS Turbo HPC型文件系统为用户提供一个完全托管的共享文件存储。SFS Turbo文件系统支持无缝访问存储在OBS对象存储桶中的对象,用户可以指定SFS Turbo内的目录与OBS对象存储桶进行关联,然后通过创建导入导出任务实现数据同步。通过OBS与SFS Turbo存储联动,可以将最新的训练数据导入到SFS Turbo,然后在训练作业中挂载SFS Turbo到容器对应ckpt目录,实现分布式读取训练数据文件。 创建SFS Turbo文件系统,详细操作指导请参考创建SFS Turbo文件系统。 图1 创建SFS Turbo 其中,文件系统类型推荐选用500MB/s/TiB或1000MB/s/TiB,应用于AI大模型场景中。存储容量推荐使用 6.0~10.8TB ,以存储更多模型文件。 图2 SFS类型和容量选择
  • 创建OBS桶 ModelArts使用对象存储服务(Object Storage Service,简称OBS)进行数据存储以及模型的备份和快照,实现安全、高可靠和低成本的存储需求。因此,在使用ModelArts之前通常先创建一个OBS桶,然后在OBS桶中创建文件夹用于存放数据。 本文档也以将运行代码以及输入输出数据存放OBS为例,请参考创建OBS桶,例如桶名:standard-llama2-13b。并在该桶下创建文件夹目录用于后续存储代码使用,例如:training_data。
  • ModelArts网络关联SFS Turbo OBS-SFS Turbo联动方案涉及VPC、SFS Turbo HPC型文件系统、OBS对象存储服务和ModelArts资源池。如果要使用训练作业挂载SFS Turbo功能,则需要配置ModelArts和SFS Turbo间网络直通,以及配置ModelArts网络关联SFS Turbo。 具体操作请参见配置ModelArts和SFS Turbo间网络直通。 图3 ModelArts网络关联SFS Turbo
  • 模型转换报错如何查看日志和定位? 通过如下的配置项打开对应的模型转换日志,可以看到更底层的报错。如配置以下的环境变量之后,再重新转换模型,导出对应的日志和dump图进行分析: 报错日志中搜到“not support onnx data type”,表示MindSpore暂不支持该算子。 报错日志中搜到“Convert graph to om failed”,表示CANN模块进行图编译存在保存,需要结合CANN的报错日志和dump图进行具体分析。 配置方式参考如下: 打开DEBUG日志。 设置MindSpore日志环境变量。 export G LOG _v=0 # 0-DEBUG、1-INFO、2-WARNING、3-ERROR 设置CANN日志环境变量。 # 0:表示DEBUG。1:表示INFO。2:表示WARNING。3:表示ERROR。4: 表示NONE。 export ASCEND_GLOBAL_LOG_LEVEL=1 # 表示日志打印 export ASCEND_SLOG_PRINT_TO_STDOUT=1 DUMP模型转换中间图。 设置DUMP中间图环境变量。 # 1:表示dump图全量内容。2:表示不dump权重数据的基础图。3:表示只dump节点关系的精简图。 export DUMP_GE_GRAPH=2 # 1:表示dump图所有图。2:表示dump除子图外的所有图。3:表示只dump最后一张图。 export DUMP_GRAPH_LEVEL=2 父主题: 常见问题
  • 自动高性能算子生成工具AKG AKG(Auto Kernel Generator)对深度神经网络中的算子进行优化,并提供特定模式下的算子自动融合功能。提升在昇腾硬件后端上运行网络的性能。 AKG由三个基本的优化模块组成:规范化、自动调度和后端优化。 规范化: 为了解决polyhedral表达能力的局限性(只能处理静态的线性程序),需要首先对计算公式IR进行规范化。规范化模块中的优化主要包括自动运算符inline、自动循环融合和公共子表达式优化等。 自动调度: 自动调度模块基于polyhedral技术,主要包括自动向量化、自动切分、thread/block映射、依赖分析和数据搬移等。 后端优化: 后端优化模块的优化主要包括TensorCore使能、双缓冲区、内存展开和同步指令插入等。
  • 自助性能调优三板斧 基于上一步完成的性能测试,为了最大化模型推理性能,首先确保当前使用的CANN版本是最新版本(最新版本请见此处),每个迭代的CANN版本都有一定的性能收益。在此基础上,可以进行三板斧自助工具式性能调优。这些调优过程由大量的项目交付经验总结,帮助您获得模型最佳推理性能,重复性能测试章节可以验证对应的收益情况。 自助性能调优三板斧分别为:通过固定shape获取更好的常量折叠、AOE性能自动调优、自动高性能算子生成工具。 通过固定shape获取更好的常量折叠 在MindIR格式转换时(即执行converter_lite命令时),通过指定具体的静态shape,并且打开--optimize参数指定“ascend_oriented”能够获得更好的常量折叠优化效果。inputShape查看方法请见转换关键参数准备。 Ascend Optimization Engine converter_lite --modelFile=resnet50.onnx --fmk=ONNX --outputFile=resnet50 --saveType=MINDIR --inputShape="input.1:1,3,224,224" --optimize=ascend_oriented 常量折叠是编译器优化中的通用技术之一,在编译节点简化常量表达。通过多数的现代编译器不会真的产生两个乘法的指令再将结果存储下来,取而代之的是会识别出语句的结构,并在编译时期将数值计算出来而不是运行时去计算(在本例子,结果为2,048,000)。 i = 320 * 200 * 32; AI编译器中,常量折叠是将计算图中预先可以确定输出值的节点替换成常量,并对计算图进行一些结构简化的操作,例如ADDN操作,以及在推理过程中的batch normalization操作等。 以BN折叠为例,如下表示折叠后获得的性能收益。 图1 BN折叠下前向运算性能收益 AOE性能自动调优 自动性能调优工具AOE(Ascend Optimization Engine),可以对于模型的图和算子运行通过内置的知识库进行自动优化,以提升模型的运行效率。开启AOE调优后,模型转换时会自动进行性能调优操作,该过程耗时较长,可能需要数小时。 AOE性能自动优化在模型转换阶段进行配置(即执行converter_lite命令时),通过--configFile参数指定配置文件aoe_config.ini,配置文件通过aoe_mode参数指定调优模式。可选值有: “subgraph tuning”:子图调优。 “operator tuning”:算子调优。 “subgraph tuning, operator tuning”:先进行子图调优,再进行算子调优。 推荐先进行子图调优,再进行算子调优,因为先进行子图调优会生成图的切分方式,子图调优后算子已经被切分成最终的shape了,再进行算子调优时,会基于这个最终shape去做算子调优。如果优先算子调优,这时调优的算子shape不是最终切分后的算子shape,不符合实际使用场景。 本例同时指定了子图调优和算子调优,工具会先进行子图调优,再进行算子调优。 # aoe_config.ini [ascend_context] aoe_mode="subgraph tuning, operator tuning" 指定--configFile=aoe_config.ini即可自动进行性能优化。 #shell converter_lite --modelFile=resnet50.onnx --fmk=ONNX --device=Ascend --outputFile=resnet50_aoe --saveType=MINDIR --configFile=aoe_config.ini 命令执行成功后,性能自动优化前后的性能对比会打印到控制台上,同时会生成更为详细的json格式调优报告。 图2 自动调优输出文件 需要注意的是,并不是所有的模型使用性能自动调优都是有收益的。在本例中,ResNet50模型自动调优收益甚微(模型转换时已经做了部分针对性优化),在有些比较复杂的模型场景下可能会有较好的收益。例如VAE_ENCODER模型使用算子调优收益为11.15%。 图3 VAE_ENCODER模型使用AOE自动调优在屏幕上显示日志 图4 AOE自动调优的输出样例 其中: model_baseline_performance表示调优前模型执行时间,单位为ms。 model_performance_improvement表示调优后模型执行时间减少百分比。 model_result_performance表示调优后模型执行时间。 repo_summary中的信息表示调优过程中使用到的知识库算子个数或者追加到知识库的算子个数。 AOE自动调优更多介绍可参考Ascend转换工具功能说明。 自动高性能算子生成工具 自动高性能算子生成工具AKG(Auto Kernel Generator),可以对深度神经网络模型中的算子进行优化,并提供特定模式下的算子自动融合功能,可提升在昇腾硬件后端上运行模型的性能。 AKG的配置也是在模型转换阶段进行配置(即执行converter_lite命令时),通过指定对应的配置文件akg.cfg,设置对应的akg优化级别,并且在模型转换时参考样例进行对应的配置。 # akg.cfg [graph_kernel_param] opt_level=2 执行命令: # shell converter_lite --fmk=ONNX --modelFile=model.onnx --outputFile=model --configFile=akg.cfg --optimize=ascend_oriented 自动高性能算子生成工具AKG更多介绍可参考图算融合配置说明和MindSpore AKG。
  • 性能测试 benchmark工具也可用于性能测试,其主要的测试指标为模型单次前向推理的耗时。在性能测试任务中,与精度测试不同,并不需要用户指定对应的输入(inDataFile)和输出的标杆数据(benchmarkDataFile),benchmark工具会随机生成一个输入进行推理,并统计推理时间。执行的示例命令行如下。 # shell benchmark --modelFile=resnet50.mindir --device=Ascend 为了简化用户使用,ModelArts提供了Tailor工具便于用户进行Benchmark性能测试,具体使用方式参考Tailor指导文档。 在某些推理场景中,模型输入的shape可能是不固定的,因此需要支持用户指定模型的动态shape,并能够在推理中接收多种shape的输入。在CPU上进行模型转换时无需考虑动态shape问题,因为CPU算子支持动态shape;而在昇腾场景上,算子需要指定具体的shape信息,并且在模型转换的编译阶段完成对应shape的编译任务,从而能够在推理时支持多种shape的输入。 绝大多数情况下,昇腾芯片推理性能相比于CPU会好很多,但是也可能会遇到和CPU推理性能并无太大差别甚至出现劣化的情况。造成这种情况的原因可能有如下几种: 模型中存在大量的类似于Pad或者Strided_Slice等算子,其在CPU和Ascend上的实现方法存在差异(硬件结构不同),后者在运算此类算子时涉及到数组的重排,性能较差; 模型的部分算子在昇腾上不支持,或者存在Transpose操作,会导致模型切分为多个子图,整体的推理耗时随着子图数量的增多而增长; 模型没有真正的调用昇腾后端,而是自动切换到了CPU上执行,这种情况可以通过输出日志来进行判断。
  • 精度测试 benchmark工具用于精度验证,主要工作原理是:固定模型的输入,通过benchmark工具进行推理,并将推理得到的输出与标杆数据进行相似度度量(余弦相似度和平均相对误差),得到模型转换后的精度偏差信息。使用benchmark进行精度比对的基本流程如下: 将模型输入保存二进制文件。 # 数据读取,预处理 image = img_preprocess(image_path) image = np.array(image, dtype=np.float32) image = np.frombuffer(image.tobytes(), np.float32) # 保存网络输入为二进制文件 image.tofile("input_data.bin") 将基准模型的输出保存到文本文件。 本例中输出节点名称为output_node_name,输出节点的shape为“(1, 1000)”,因此一共有两维,对应的输出文件为“output_node_name 2 1 1000”,再加上输出的值即可。 # 基于原始pth模型前向推理。 output = model_inference(input_data) # 保存网络输出节点名称、维度、shape及输出到本地文件。 with open("output_data.txt", "w") as f: f.write("output_node_name 2 1 1000\n") f.write(" ".join([str(i) for i in output])) 使用benchmark工具进行精度对比。 # shell benchmark --modelFile=model.mindir --inputShapes=1,3,224,224 --inDataFile=input_data.bin --device=Ascend --benchmarkDataFile=output_data.txt --accuracyThreshold=5 --cosineDistanceThreshold=0.99 其中,--accuracyThreshold=5表示平均绝对误差的容忍度最大为5%,--cosineDistanceThreshold =0.99表示余弦相似度至少为99%,--inputShapes可将模型放入到netron官网中查看。 图1 benchmark对接结果输出示例图 为了简化用户使用,ModelArts提供了Tailor工具便于用户进行Benchmark精度测试,具体使用方式参考Tailor指导文档。
  • 动态batch 在模型转换阶段通过--configFile参数指定配置文件,并且在配置文件中配置input_shape及dynamic_dims动态参数。其中input_shape的-1表示动态shape所在的维度,dynamic_dims指定动态维度的取值范围,例如“[1~4],[8],[16]”表示该动态维度支持1、2、3、4、8、6共六种大小。 # config.ini [ascend_context] input_shape=input.1:[-1,3,224,224] dynamic_dims=[1~4],[8],[16] 在执行convert_lite命令时,指定--configFile=config.ini即可自动编译指定的动态shape。 # shell converter_lite --modelFile=resnet50.onnx --fmk=ONNX --device=Ascend --outputFile=resnet50_dynamic --saveType=MINDIR --configFile=config.ini 注意:推理应用开发时,需要使用模型的Resize功能,改变输入的shape。而且Resize操作需要在数据从host端复制到device端之前执行,下面是一个简单的示例,展示如何在推理应用时使用动态Shape。 import mindspore_lite as mslite import numpy as np from PIL import Image # 设置目标设备上下文为Ascend,指定device_id为0。 context = mslite.Context() context.target = ["ascend"] context.ascend.device_id = 0 # 构建模型。 model = mslite.Model() model.build_from_file("./resnet50_dynamic.mindir", mslite.ModelType.MINDIR, context) data = np.random.rand(8, 3, 224, 224).astype(np.float32) inputs = model.get_inputs() model.resize(inputs, [list(data.shape)]) inputs[0].set_data_from_numpy(data) # 前向推理,并将结果从device侧传到host侧。 outputs = model.predict(inputs)[0].get_data_to_numpy() print(outputs.shape) # (8, 1000)
  • 模型准备 MindSpore Lite提供的模型convertor工具可以支持主流的模型格式到MindIR的格式转换,用户需要导出对应的模型文件,推荐导出为ONNX格式。 如何导出ONNX模型 PyTorch转ONNX,操作指导请见此处。 PyTorch导出ONNX模型样例如下: import torch import torchvision model = torchvision.models.resnet50(pretrained=True) # 保存模型为ONNX格式 torch.onnx.export(model, torch.randn(1, 3, 224, 224), "resnet50.onnx") TensorFlow导出ONNX模型,操作指导请见此处。 如何导出PTH模型 PyTorch模型导出时需要包含模型的结构信息,需要利用jit.trace方式完成模型的导出与保存。 # If you are instantiating the model with *from_pretrained* you can also easily set the TorchScript flag model = BertModel.from_pretrained("bert-base-uncased", torchscript=True) # Creating the trace traced_model = torch.jit.trace(model, [tokens_tensor, segments_tensors]) torch.jit.save(traced_model, "traced_bert.pt")
  • 转换关键参数准备 对应的模型转换成MindIR格式,通过后端绑定的编译形式来运行以达到更好的性能(类似静态图的运行模式),所以需要提前准备以下几个重点参数。 输入的inputShape,包含batch信息。 MSLite涉及到编译优化的过程,不支持完全动态的权重模式,需要在转换时确定对应的inputShape,用于模型的格式的编译与转换,可以在netron官网进行查看,或者对于模型结构中的输入进行shape的打印,并明确输入的batch。 一般来说,推理时指定的inputShape和用户的业务及推理场景紧密相关,可以通过原始模型推理脚本或者网络模型进行判断。需要把Notebook中的模型下载到本地后,再放入netron官网中,查看其inputShape。 如果netron中没有显示inputShape,可能由于使用了动态shape模型导致,请确保使用的是静态shape模型。静态shape模型文件导出方法请参考模型准备。 图1 netron中查看inputShape 精度选择。 精度选择需要在模型转换阶段进行配置,执行converter_lite命令时通过--configFile参数指定配置文件路径,配置文件通过precision_mode参数指定精度模式。可选的参数有“enforce_fp32”,“preferred_fp32”,“enforce_fp16”,“enforce_origin”或者“preferred_optimal”,默认为“enforce_fp16”。 [ascend_context] precision_mode= preferred_fp32
  • 推理应用适配 MindSpore Lite提供了JAVA/C++/Python API,进行推理业务的适配,并且在构建模型时,通过上下文的参数来确定运行时的具体配置,例如运行后端的配置等。下文以Python接口为例。 使用MindSpore Lite推理框架执行推理并使用昇腾后端主要包括以下步骤: 创建运行上下文:创建Context,保存需要的一些基本配置参数,用于指导模型编译和模型执行,在昇腾迁移时需要特别指定target为“Ascend”,以及对应的device_id。 context = mslite.Context() context.target = ["ascend"] context.ascend.device_id = 0 模型加载与编译:执行推理之前,需要调用Model的build_from_file接口进行模型加载和模型编译。模型加载阶段将文件缓存解析成运行时的模型。模型编译阶段会耗费较多时间所以建议Model创建一次,编译一次,多次推理。 model = mslite.Model() model.build_from_file("./resnet50.mindir", mslite.ModelType.MINDIR, context) 输入数据:编译后的模型提供了predict接口用户执行模型推理任务,Inputs输入为List Tensor,这里的Tensor是MSLite的概念,具体的列表长度和tensor类型由转换时的InputShape来确定,由于后端指定了ascend,这些tensor都是在昇腾设备的显存中,用户需要在对应的tensor中填入数据,这些数据也会被搬移到显存中,进一步对于Inputs输入的内容进行处理。 data = convert_img(input_image) in_data = [np.array(data)] inputs = model.get_inputs() for i, _input in enumerate(inputs): _input.set_data_from_numpy(in_data[i]) 执行推理:使用Model的predict进行模型推理,返回值为Outputs,也是List Tensor类型,具体的长度和类别由模型定义,对应的Tensor数据由于指定了ascend后端,Output的内容在显存中,通过tensor的get_data_to_numpy方法来获取,并将数据读取到内存中使用。 outputs = model.predict(inputs) outputs = [output.get_data_to_numpy() for output in outputs] 更多Python接口的高级用法与示例,请参考Python API。
  • 模型转换 在ModelArts开发环境中,通过对应的转换预置镜像,直接执行对应的转换过程,对应的转换和评估工具都已经预置了最新版本,详细介绍请见使用说明。inputShape查看方法请见转换关键参数准备。 !converter_lite --modelFile=resnet50.onnx --fmk=ONNX --outputFile=resnet50 --saveType=MINDIR --inputShape="input.1:1,3,224,224" --device=Ascend
  • 迁移环境简介 ModelArts开发环境针对推理昇腾迁移的场景提供了云上可以直接访问的开发环境,具有如下优点: 利用云服务的资源使用便利性,可以直接使用到不同规格的昇腾设备。 通过指定对应的运行镜像,可以直接使用预置的、在迁移过程中所需的工具集,且已经适配到最新的版本可以直接使用。 开发者可以通过浏览器入口以Notebook方式访问,也可以通过VSCode远程开发的模式直接接入到云上环境中完成迁移开发与调测,最终生成适配昇腾的推理应用。 当前支持以下两种迁移环境搭建方式: ModelArts Standard:在Notebook中,使用预置镜像进行。 ModelArts Lite DevServer:在裸金属服务器中 ,自助配置好存储、安装固件、驱动、配置网络等。
  • 核心概念 推理业务昇腾迁移整体流程及工具链 图1 推理业务昇腾迁移整体路径 推理业务昇腾迁移整体分为七个大的步骤,并以完整工具链覆盖全链路: 迁移评估:针对迁移可行性、工作量,以及可能的性能收益进行大致的预估。 环境准备:利用ModelArts提供的开发环境一键式准备好迁移、调测需要的运行环境与工具链。 模型适配:针对昇腾迁移模型必要的转换和改造。 模型准备,导出和保存确定格式的模型。 转换参数准备,准备模型业务相关的关键参数。 模型转换,包含模型转换、优化和量化等。 应用集成。 针对转换的模型运行时应用层适配。 数据预处理。 模型编排。 模型裁剪。 精度校验。 精度对比误差统计工具。 自动化精度对比工具。 网络结构可视化工具。 性能调优。 性能测试。 性能调优三板斧。 性能分析与诊断。 迁移测试报告。 推理迁移验收表。 ModelArts开发环境 ModelArts作为华为云上的 AI开发平台 ,提供交互式云上开发环境,包含标准化昇腾算力资源和完整的迁移工具链,帮助用户完成昇腾迁移的调测过程,进一步可在平台上将迁移的模型一键部署成为在线服务向外提供推理服务,或者运行到自己的运行环境中。 MindSpore Lite 华为自研的AI推理引擎,后端对于昇腾有充分的适配,模型转换后可以在昇腾上获得更好的性能,配合丰富的适配工具链,降低迁移成本,该工具在推理迁移工作的预置镜像已安装,可在镜像中直接使用(见环境准备)。关于MindSpore Lite详细介绍可参考MindSpore Lite文档。在使用MindSpore Lite过程中遇到问题时,可参考MindSpore Lite官网提供的问题定位指南进行问题定位。
  • 迁移路线介绍 当前推理迁移时,不同的模型类型可能会采取不同的迁移技术路线。主要分为以下几类: CV类小模型例如yolov5,以及部分AIGC场景的模型迁移,目前推荐使用MindSpore-Lite推理路线,可以利用MindSpore提供的图编译和自动调优能力,达到更好的模型性能。 LLM大语言模型场景,在GPU下通常会使用vLLM等大模型推理框架,因此迁移到昇腾时,推荐使用PyTorch + ascend-vllm技术路线进行迁移。 如果您使用的模型在上述案例文档中已包含,建议您直接使用案例中迁移好的模型,如果您的模型不在已提供的范围内,或者您因业务要求需要自行完成端到端的迁移,可以参考本迁移指导书介绍的步骤进行操作。 本文的迁移指导及快速入门案例均针对路线1也即MindSpore-Lite迁移路线进行介绍。使用ascend-vllm路线的迁移指导会在后续提供,您可以从上面的案例中下载相关代码并直接参考实现源码。
  • 网卡名称错误 当训练开始时提示网卡名称错误。或者通信超时。可以使用ifconfig命令检查网卡名称配置是否正确。 比如,ifconfig看到当前机器IP对应的网卡名称为enp67s0f5,则可以设置环境变量指定该值。 图1 网卡名称错误 export GLOO_SOCKET_IFNAME=enp67s0f5 # 多机之间使用gloo通信时需要指定网口名称, export TP_SOCKET_IFNAME=enp67s0f5 # 多机之间使用TP通信时需要指定网口名称 export HCCL_SOCKET_IFNAME=enp67s0f5 # 多机之间使用HCCL通信时需要指定网口名称 关于环境变量的解释可以参考:Distributed communication package - torch.distributed — PyTorch 2.3 documentation 父主题: 常见错误原因和解决方法
  • 附录:基于vLLM不同模型推理支持最小卡数和最大序列说明 基于vLLM(v0.5.0)部署推理服务时,不同模型推理支持的最小昇腾卡数和对应卡数下的max-model-len长度说明,如下面的表格所示。 以下值是在gpu-memory-utilization为0.9时测试得出,为服务部署所需的最小昇腾卡数及该卡数下推荐的最大max-model-len长度,不代表最佳性能。 以llama2-13b为例,NPU卡显存为32GB时,至少需要2张卡运行推理业务,2张卡运行的情况下,推荐的最大序列max-model-len长度最大是16K,此处的单位K是1024,即16*1024。 测试方法:gpu-memory-utilization为0.9下,以4k、8k、16k递增max-model-len,直至达到能执行静态benchmark下的最大max-model-len。 表1 基于vLLM不同模型推理支持最小卡数和最大序列说明 序号 模型名 32GB显存 64GB显存 最小卡数 最大序列(K) max-model-len 最小卡数 最大序列(K) max-model-len 1 llama-7b 1 16 1 32 2 llama-13b 2 16 1 16 3 llama-65b 8 16 4 16 4 llama2-7b 1 16 1 32 5 llama2-13b 2 16 1 16 6 llama2-70b 8 32 4 64 7 llama3-8b 1 32 1 128 8 llama3-70b 8 32 4 64 9 qwen-7b 1 8 1 32 10 qwen-14b 2 16 1 16 11 qwen-72b 8 8 4 16 12 qwen1.5-0.5b 1 128 1 256 13 qwen1.5-7b 1 8 1 32 14 qwen1.5-1.8b 1 64 1 128 15 qwen1.5-14b 2 16 1 16 16 qwen1.5-32b 4 32 2 64 17 qwen1.5-72b 8 8 4 16 18 qwen1.5-110b -- 8 128 19 qwen2-0.5b 1 128 1 256 20 qwen2-1.5b 1 64 1 128 21 qwen2-7b 1 8 1 32 22 qwen2-72b 8 32 4 64 23 chatglm2-6b 1 64 1 128 24 chatglm3-6b 1 64 1 128 25 glm-4-9b 1 32 1 128 26 baichuan2-7b 1 8 1 32 27 baichuan2-13b 2 4 1 4 28 yi-6b 1 64 1 128 29 yi-9b 1 32 1 64 30 yi-34b 4 32 2 64 31 deepseek-llm-7b 1 16 1 32 32 deepseek-coder-instruct-33b 4 32 2 64 33 deepseek-llm-67b 8 32 4 64 34 mistral-7b 1 32 1 128 35 mixtral-8x7b 4 8 2 32 36 gemma-2b 1 64 1 128 37 gemma-7b 1 8 1 32 38 falcon-11b 1 8 1 64 父主题: 主流开源大模型基于Standard适配PyTorch NPU推理指导(6.3.907)
  • 准备Notebook ModelArts Notebook云上云下,无缝协同,更多关于ModelArts Notebook的详细资料请查看Notebook使用场景介绍。本案例中使用ModelArts的开发环境Notebook部署推理服务进行调试,请按照以下步骤完成Notebook的创建。 登录ModelArts控制台,在贵阳一区域,进入开发环境的Notebook界面,单击右上角“创建”,创建一个开发环境。创建Notebook的详细介绍可以参考创建Notebook实例,此处仅介绍关键步骤。 图1 创建Notebook 创建Notebook时,选择自定义镜像,并选择Step8 注册镜像章中注册的镜像。 图2 选择自定义镜像 资源类型推荐使用专属资源池,规格选到Ascend snt9b,显存规格建议选择64G以上的规格,磁盘规格建议选择500GB及以上。 创建完Notebook后,待Notebook状态变为“运行中”时,打开Notebook,可参考后续章节在Notebook调试环境中部署推理服务。 父主题: 准备工作
  • 准备权重 获取对应模型的权重文件,获取链接参考支持的模型列表和权重文件。 在创建的OBS桶下创建文件夹用以存放权重文件,例如在桶中创建文件夹。将下载的权重文件上传至OBS中,得到OBS下数据集结构。此处以qwen-14b举例。 obs://${bucket_name}/${folder-name}/ #OBS桶名称和文件目录可以自定义创建,此处仅为举例。 ├── config.json ├── generation_config.json ├── gitattributes.txt ├── LICENSE.txt ├── Notice.txt ├── pytorch_model-00001-of-00003.bin ├── pytorch_model-00002-of-00003.bin ├── pytorch_model-00003-of-00003.bin ├── pytorch_model.bin.index.json ├── README.md ├── special_tokens_map.json ├── tokenizer_config.json ├── tokenizer.json ├── tokenizer.model └── USE_POLICY.md └── ... 父主题: 准备工作
  • 创建OBS桶 ModelArts使用对象存储服务(Object Storage Service,简称OBS)存储输入输出数据、运行代码和模型文件,实现安全、高可靠和低成本的存储需求。因此,在使用ModelArts之前通常先创建一个OBS桶,然后在OBS桶中创建文件夹用于存放数据。 本文档也以将运行代码存放OBS为例,请参考创建OBS桶,例如桶名:standard-qwen-14b。并在该桶下创建文件夹目录用于后续存储代码使用,例如:code。 创建的OBS桶和开通的Standard资源必须在同一个Region。
  • 网卡名称错误 当训练开始时提示网卡名称错误。或者通信超时。可以使用ifconfig命令检查网卡名称配置是否正确。 比如,ifconfig看到当前机器IP对应的网卡名称为enp67s0f5,则可以设置环境变量指定该值。 图1 网卡名称错误 export GLOO_SOCKET_IFNAME=enp67s0f5 # 多机之间使用gloo通信时需要指定网口名称, export TP_SOCKET_IFNAME=enp67s0f5 # 多机之间使用TP通信时需要指定网口名称 export HCCL_SOCKET_IFNAME=enp67s0f5 # 多机之间使用HCCL通信时需要指定网口名称 关于环境变量的解释可以参考:Distributed communication package - torch.distributed — PyTorch 2.3 documentation 父主题: 常见错误原因和解决方法
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全