云服务器内容精选

  • 动态分档模型转换(可选) 如果迁移的模型有多个shape档位的需求,可以通过如下方式对模型进行分档转换。 动态分档是指将模型输入的某一维或者某几维设置为“动态”可变,但是需要提前设置可变维度的“档位”范围。即转换得到的模型能够在指定的动态轴上使用预设的几种shape(保证模型支持的shape),相比于静态shape更加灵活,且性能不会有劣化。 动态分档模型转换需要使用配置文件,指定输入格式为“ND”,并在config文件中配置ge.dynamicDims和input_shape使用,在input_shape中将输入shape的动态维度设为-1,并在ge.dynamicDims中指定动态维度的档位,更多配置项可以参考官方文档。 如果网络模型只有一个输入:每个档位的dim值与input_shape参数中的-1标识的参数依次对应,input_shape参数中有几个-1,则每档必须设置几个维度。 以text_encoder模型为例,修改配置文件text_encoder.ini如下所示: # text_encoder.ini [acl_build_options] input_format="ND" input_shape="input_ids:1,-1" ge.dynamicDims="77;33" 使用上述配置文件转换得到的模型,支持的输入shape为(1,77)和(1,33)。 然后使用converter lite执行模型转换,转换命令如下: converter_lite --modelFile=./onnx_models/text_encoder/model.onnx --fmk=ONNX --saveType=MINDIR --optimize=ascend_oriented --outputFile=./mindirs --configFile=./configs/text_encoder.ini 如果网络模型有多个输入:档位的dim值与网络模型输入参数中的-1标识的参数依次对应,网络模型输入参数中有几个-1,则每档必须设置几个维度。 以unet模型为例,该网络模型有三个输入,分别为“sample(1,4,64,64)”、“timestep(1)”、“encoder_hidden_states(1,77,768)”,修改unet.ini配置文件如下所示: # unet.ini [acl_build_options] input_format="ND" input_shape="sample:-1,4,64,64;timestep:1;encoder_hidden_states:-1,77,768" ge.dynamicDims="1,1;2,2;3,3" 转换得到的模型支持的输入dims组合档数分别为: 图3 组合档数 第0档:sample(1,4,64,64) + timestep(1) + encoder_hidden_states(1,77,768) 第1档:sample(2,4,64,64) + timestep(1) + encoder_hidden_states(2,77,768) 第2档:sample(3,4,64,64) + timestep(1) + encoder_hidden_states(3,77,768) 然后使用converter lite执行模型转换,转换命令如下: converter_lite --modelFile=./onnx_models/unet/model.onnx --fmk=ONNX --saveType=MINDIR --optimize=ascend_oriented --outputFile=./mindirs --configFile=./configs/unet.ini 最多支持100档配置,每一档通过英文逗号分隔。 如果用户设置的dim数值过大或档位过多,可能会导致模型编译失败,此时建议用户减少档位或调低档位数值。 如果用户设置了动态维度,实际推理时,使用的输入数据的shape需要与设置的档位相匹配。
  • PyTorch模型转换为Onnx模型(可选) 获取onnx模型有两种方式,方式一是使用官方提供的模型转换脚本将pytorch模型转换为onnx模型,方式二是对于提供了onnx模型的仓库,可以直接下载onnx模型。下面介绍方式一如何操作,如果采用方式二,可以跳过此步骤。 通过git下载diffusers对应版本的源码。 git clone https://github.com/huggingface/diffusers.git -b v0.11.1 在diffusers的script/convert_stable_diffusion_checkpoint_to_onnx.py脚本中,可以通过执行以下命令生成onnx模型,其中model_path指定pytorch的模型根目录,output_path指定生成的onnx模型目录。 cd /home_host/work python diffusers/scripts/convert_stable_diffusion_checkpoint_to_onnx.py --model_path "./runwayml/pytorch_models" --output_path "./pytorch_to_onnx_models"
  • 获取模型shape 由于在后续模型转换时需要知道待转换模型的shape信息,这里指导如何通过训练好的stable diffusion pytorch模型获取模型shape,主要有如下两种方式获取: 方式一:通过stable diffusion的pytorch模型获取模型shape。 方式二:通过查看代码仓库,根据每个模型的configs文件获取已知的shape大小。 下文主要介绍方式1如何通过stable diffusion的pytorch模型获取模型shape。 在pipeline应用准备章节,已经下载到sd的pytorch模型(/home_host/work/runwayml/pytorch_models)。进入工作目录: cd /home_host/work 新建python脚本文件“parse_models_shape.py”用于获取shape,其中model_path是指上面下载的pytorch_models的路径。 # parse_models_shape.py import torch import numpy as np from diffusers import StableDiffusionPipeline model_path = '/home_host/work/runwayml/pytorch_models' pipeline = StableDiffusionPipeline.from_pretrained(model_path, torch_dtype=torch.float32) # TEXT ENCODER num_tokens = pipeline.text_encoder.config.max_position_embeddings text_hidden_size = pipeline.text_encoder.config.hidden_size text_input = pipeline.tokenizer( "A sample prompt", padding="max_length", max_length=pipeline.tokenizer.model_max_length, truncation=True, return_tensors="pt", ) print("# TEXT ENCODER") print(f"input_ids: {np.array(text_input.input_ids.shape).tolist()}") # UNET unet_in_channels = pipeline.unet.config.in_channels unet_sample_size = pipeline.unet.config.sample_size print("# UNET") print(f"sample: [{2}, {unet_in_channels} {unet_sample_size} {unet_sample_size}]") print(f"timestep: [{1}]") # 此处应该是1,否则和后续的推理脚本不一致 print(f"encoder_hidden_states: [{2}, {num_tokens} {text_hidden_size}]") # VAE ENCODER vae_encoder = pipeline.vae vae_in_channels = vae_encoder.config.in_channels vae_sample_size = vae_encoder.config.sample_size print("# VAE ENCODER") print(f"sample: [{1}, {vae_in_channels}, {vae_sample_size}, {vae_sample_size}]") # VAE DECODER vae_decoder = pipeline.vae vae_latent_channels = vae_decoder.config.latent_channels vae_out_channels = vae_decoder.config.out_channels print("# VAE DECODER") print(f"latent_sample: [{1}, {vae_latent_channels}, {unet_sample_size}, {unet_sample_size}]") # SAFETY CHECKER safety_checker = pipeline.safety_checker clip_num_channels = safety_checker.config.vision_config.num_channels clip_image_size = safety_checker.config.vision_config.image_size print("# SAFETY CHECKER") print(f"clip_input: [{1}, {clip_num_channels}, {clip_image_size}, {clip_image_size}]") print(f"images: [{1}, {vae_sample_size}, {vae_sample_size}, {vae_out_channels}]") 执行以下命令获取shape信息。 python parse_models_shape.py 可以看到获取的shape信息如下图所示。 图1 shape信息
  • 静态shape模型转换 转换静态shape模型需要在模型转换阶段固定模型的输入shape,也就是说每个输入shape是唯一的。静态shape转换主要包括两种场景: 第一种是待转换onnx模型的输入本身已经是静态shape,此时不需要在转换时指定输入shape也能够正常转换为和onnx模型输入shape一致的mindir模型。 第二种是待转换onnx模型的输入是动态shape(导出onnx模型时指定了dynamic_axes参数),此时需要在转换时明确指定输入的shape。 转换时指定输入shape可以在命令行中指定,也可以通过配置文件的形式进行指定。 在命令行中指定输入shape。 命令行可以直接通过--inputShape参数指定输入的shape,格式为“input_name:input_shape”,如果有多个输入,需要使用“;”隔开,比如“input1_name:input1_shape;input2_name:input2_shape”。 converter_lite --modelFile=./text_encoder/model.onnx --fmk=ONNX --saveType=MINDIR --optimize=ascend_oriented --outputFile=./text_encoder --inputShape="input_ids:1,77" 在配置文件中指定输入shape。 配置文件中通过“[ascend_context]”配置项指定input_shape,格式与命令行一致,多个输入,需要使用“;”隔开;然后在命令行中通过--configFile指定对应的配置文件路径即可。 # text_encoder.ini [ascend_context] input_shape=input_ids:[1,77] 转换命令如下: converter_lite --modelFile=./text_encoder/model.onnx --fmk=ONNX --saveType=MINDIR --optimize=ascend_oriented --outputFile=./text_encoder --configFile=./text_encoder.ini 在使用converter_lite工具转换时,默认是将所有算子转换为fp16,如果想要将固定shape的模型精度修改为fp32进行转换,需要在配置文件中指定算子的精度模式为precision_mode,配置文件的写法如下(更多精度模式请参考precision_mode): # text_encoder.ini [ascend_context] input_shape=input_ids:[1,77] precision_mode=enforce_fp32 对于本次AIGC迁移,为了方便对多个模型进行转换,可以通过批量模型转换脚本自动完成所有模型的转换。 执行以下命令创建并进入static_shape_convert目录。 mkdir -p /home_host/work/static_shape_convert cd /home_host/work/static_shape_convert 在static_shape_convert目录下新建converter_onnx2mindir.sh文件并复制下面内容。其中,onnx_dir表示onnx模型的目录,mindir_dir指定要生成的mindir模型的保存目录。 # converter_onnx2mindir.sh # 设置onnx模型和mindir模型目录 onnx_dir=/home_host/work/runwayml/onnx_models mindir_dir=./mindir_models # 指定配置文件路径 config_dir=/home_host/work/modelarts-ascend/examples/AIGC/stable_diffusion/configs echo "================begin converter_lite=====================" sub_cmd='--fmk=ONNX --optimize=ascend_oriented --saveType=MINDIR' mkdir -p $mindir_dir # rm缓存,慎改 atc_data_dir=/root/atc_data/ # 通用转换方法 common_converter_model() { model_name=$1 echo "start to convert $model_name" rm -rf $atc_data_dir converter_lite --modelFile="$onnx_dir/$model_name/model.onnx" \ --outputFile="$mindir_dir/$model_name" \ --configFile="$config_dir/$model_name.ini" \ $sub_cmd printf "end converter_lite\n" } common_converter_model "text_encoder" common_converter_model "unet" common_converter_model "vae_encoder" common_converter_model "vae_decoder" common_converter_model "safety_checker" echo "================converter_lite over=====================" 转换结果如下,其中safety_checker模型转换成功了,但中间有ERROR日志,这个属于常量折叠失败,不影响结果。 图2 转换结果
  • 入门实践 当您购买AppStage后,可以根据自身的业务需求使用AppStage提供的一系列常用实践。 表1 表1 常用最佳实践 实践 描述 一站式应用开发、应用托管以及应用运维 介绍如何使用应用平台AppStage一站式功能,完成基于应用维度提供的从服务身份录入、开发、测试、版本发布、托管部署、运维监控的全场景全生命周期管理。 基于运维数仓的数据开发与应用 介绍如何通过AppStage运维中心完成对业务实时数据的接入、处理、开发与应用。 基于Spring Cloud框架进行应用上云 以Spring Cloud Demo项目为例,带您体验使用AppStage的开发中心、运维中心及运行时引擎进行工程创建、代码开发、打包发布、部署上线的全过程。
  • 使用流程 通过图1您可以了解如何在AI原生应用引擎创建数据集、创建微调任务、部署推理模型以及在线测试模型效果。 图1 模型微调流程 创建微调数据集 数据集是模型微调的基础,首先需要创建用于模型训练的数据集。 创建模型微调流水线 通过模型微调任务进行模型训练,微调任务结束后,将生成改进后的新模型。 部署模型 模型部署是通过为基座模型(即原模型)和微调后的新模型创建用于预测的模型服务的过程实现。 测试模型调优效果 在线测试微调后的模型(输入问题发起请求获取数据分析结果),可检验模型的准确性、可靠性及反应效果。 清除相应资源 对于不再需要使用的微调任务和模型服务,及时清除相应资源,避免不必要的扣费。
  • 管理关键风险 在“测试评估”页面选择“关键风险”页签,然后单击“新增”。 在“新增关键风险”页面,如图6所示,参数说明请参见表6。 图6 新增关键风险 表6 关键风险参数说明 参数名 参数说明 风险描述 风险问题的描述。 级别 区分三个级别:低、中、高 影响分析 风险问题的相关影响分析。 规避措施和计划 规避该风险问题的相关措施和计划。 单击“确定”。新增的关键风险显示在风险列表中。 可选:(可选)在风险列表“操作”列单击“编辑”,在“编辑关键风险”页面可编辑风险问题的相关信息,参数说明可参见表6。 可选:(可选)在风险列表“操作”列单击“删除”,在“删除风险”对话框确认删除的风险问题并单击“确定”,即可删除相应的风险问题。
  • 管理单项测试结论 在“测试评估”页面选择“测试结论”页签,系统预置了四个测试类型:遗留DI值、功能评估、性能评估和安全评估。 单击“新增”,在“新增测试结论”页面,设置测试结论相关参数,如图5所示,参数说明请参见表5,设置完成后单击“确定”。 图5 编辑测试结论 表5 测试结论参数说明 参数名 参数说明 测试类型 输入测试类型。 测试结论 根据实际情况可设置为:通过、不通过或不涉及。 评估说明(可选) 测试评估的相关说明。 附件(可选) 单击“添加文件”,最多可上传一个附件文件辅助测试评估的说明,且只能上传ZIP、RAR、DOCX、DOC、XLS、XLSX格式文件,文件不能超过50MB。 说明: 用户需对自己上传文件的安全风险负责,开发中心不对用户自己上传的文件做任何处理。 添加文件后,如需变更文件,可光标移至文件,在文件右侧单击,将旧文件删除后,再单击“添加文件”重新上传新文件。 可选:(可选)在测试结论列表操作列单击“编辑”,在“编辑测试结论”页面可编辑测试评估的相关信息,参数说明可参见表5。 可选:(可选)在测试结论列表操作列单击“删除”,在“删除测试结论”对话框单击“确定”,可删除不需要的测试类型及其结论。 系统预置的四个测试类型(遗留DI值、功能评估、性能评估、安全评估)不可删除。
  • 下载代码 下载代码是AppStage集成代码托管CodeArts Repo服务的能力,基于Git的代码托管服务,支持将仓库文件下载到本地进行文件的操作。该操作需要具备开发人员角色权限,权限申请方法请参见申请权限。 在开发中心左侧导航栏,选择“代码仓管理”。首次将仓库克隆/下载到本地的方式主要分为以下三种: 使用SSH协议克隆代码托管仓库到本地。 使用HTTPS协议克隆代码托管仓库到本地。 从浏览器下载代码包。
  • 使用场景说明 应用平台当前支持的主流使用场景如表1所示。 表1 使用场景介绍 场景 场景介绍 使用功能 快速使用 一站式完成应用开发、应用托管及应用运 应用平台面向应用全生命周期管理提供一站式能力。用户开箱即用,进行全流程规范高效协作。用户可以通过应用平台基于应用维度提供从服务的身份录入、开发、测试、版本发布、托管部署、运维监控、运营等全场景全生命周期管理。 开发中心 运行时引擎 运维中心 一站式应用开发、应用托管以及应用运维 将已有应用接入至应用平台进行运维管理 应用平台运维中心提供了一站式智能化运维平台,助力企业提升运维质量、效率与可靠性。围绕云原生业务场景打造,用一个Portal完成所有运维工作,避免了多个运维工具拼凑,从传统运维的以资源管理为核心升级为以应用管理为核心。 应用生命周期数据可视化,打通应用端、管、云全链路数据孤岛,全栈数据可观测,构建应用稳定性指标体系和监控大盘,进行度量与治理。 使用AIOps算法支撑故障智能化诊断与恢复等场景,通过AI异常检测、根因诊断和故障恢复预案,降低业务故障恢复时间,提升业务质量。 基于AIOps运维智能实现无人值守变更,通过Everything As a Code(XAC)实现变更全流程自动化,变更过程可控、结果可信。 支持自动化混沌工程实验,支持80+故障注入方法,预定义50多种故障演练场景,充分验证应用可靠性,助力应用可用性达到99.99%。 以财务视角看运维(FinOps),让企业感知每一分钱花在什么地方,花的是否合理,是否存在浪费,并提供成本预测和优化建议,帮助企业降本增效。 运维中心 将已有应用接入至应用平台进行运维管理 使用应用平台进行应用运营 应用平台运营中心在AppStage服务SaaS应用的全生命周期的背景下,以SaaS应用运营为主线,主要面向SaaS应用运营者(运营管理员/指标开发者/指标查看者),提供SaaS应用运营的分析底座、领域或行业经验资产以及可视化看板等能力,帮助用户高效率、低门槛的展开SaaS应用运营,支撑SaaS业务的成功。 用户可以通过应用数据接入、数据建模配置、指标配置,以及自定义运营看板,分析产品运营过程中取得的成效和潜在问题。 运营中心 使用应用平台进行应用运营 使用AI原生应用引擎完成大模型调优并测试效果 AI原生应用引擎是一站式的企业专属AI原生应用开发平台,该平台面向企业的研发/技术人员,提供企业专属大模型开发和应用开发的整套工具链,包括数据准备、模型选择/调优、知识工程、模型编排、应用部署、应用集成等能力,降低智能应用开发门槛、提升开发效率。AI原生应用引擎助力企业客户将专属大模型能力融入自己的业务应用链路或对外应用服务中,实现降本增效、改进决策方式、提升客户体验、创新增长模式等经营目标,完成从传统应用到智能应用的竞争力转型。 以典型的大模型调优及效果测试为例,体验AI原生应用引擎创建数据集、创建微调任务、部署推理模型以及在线测试模型效果的过程。 AI原生应用引擎 使用AI原生应用引擎完成大模型调优并测试效果
  • 查询银行网点名称 输入参数 输入参数说明如表2所示。 表2 查询银行网点名称输入参数说明 参数 必填 说明 bankType 是 银行类型。支持下拉框和输入框两种模式。 中国工商银行 中国农业银行 中国建设银行 国家开发银行 交通银行 中信银行 中国光大银行 华夏银行 南京银行 queryName 是 关键字。 输出参数 用户可以在之后的执行动作中调用该输出参数,输出参数说明请参见表3。 表3 查询银行网点名称输出参数说明 参数 说明 银行类型 银行类型。 银行名称 银行名称。 银行编号 银行编号。 地址 地址。 网点名称 网点名称。 联系电话 联系电话。
  • 获取用户ID 通过手机号或邮箱获取用户ID。 输入参数 输入参数说明如表4所示。 表4 获取用户ID输入参数说明 参数 必填 说明 用户邮箱 否 用户邮箱。 用户手机号 是 用户手机号。 输出参数 用户可以在之后的执行动作中调用该输出参数,输出参数说明请参见表5。 表5 获取用户ID输出参数说明 参数 说明 错误码 错误码。 非0表示失败。 错误描述 错误描述。 -手机号或者邮箱对应的用户id信息 手机号或者邮箱对应的用户ID信息。 --用户id 用户ID。 --邮箱 邮箱。 --手机号 手机号。
  • 获取用户的OKR列表 根据用户ID提取用户的OKR列表。 输入参数 输入参数说明如表2所示。 表2 获取用户的OKR列表输入参数说明 参数 必填 说明 用户ID类型 否 用户的ID类型。支持下拉框和输入框两种模式。 用户的open id 用户的union id 用户的union id 用户的people_admin_id 请求列表的偏移 是 请求列表的偏移。 示例值:0 列表长度 是 列表长度 。长度范围为0-10。 示例值:5 请求OKR的语言版本 是 请求OKR的语言版本。 示例值:zh_cn user_id 是 user_id。 body 否 支持数组和输入框两种模式。 输出参数 用户可以在之后的执行动作中调用该输出参数,输出参数说明请参见表3。 表3 获取用户的OKR列表输出参数说明 参数 说明 错误码 错误码。 非0表示失败。 -OKR列表 OKR列表。 -OKR周期总数 OKR周期总数。 错误描述 错误描述。
  • 近三天空气质量 提供指定城市近三天的空气质量信息。 输入参数 用户配置近三天空气质量执行动作,相关参数说明如表4所示。 表4 近三天空气质量输入参数说明 参数 必填 说明 城市 是 填写想要查询的城市名称,有输入框和下拉框选择。 输出参数 用户可以在之后的执行动作中调用该输出参数,输出参数说明请参考表5。 表5 近三天空气质量输出参数说明 参数 说明 城市 所查询的城市名。 今天空气质量值 今天空气质量值。 今天空气质量最大值 今天空气质量的最大值。 今天空气质量最小值 今天空气质量的最小值。 今天空气质量等级 今天空气质量的等级。 今天日期 今天日期。 明天空气质量值 明天空气质量值。 明天空气质量最大值 明天空气质量的最大值。 明天空气质量最小值 明天空气质量的最小值。 明天空气质量等级 明天空气质量的等级。 明天日期 明天日期。 后天空气质量值 后天空气质量值。 后天空气质量最大值 后天空气质量的最大值。 后天空气质量最小值 后天空气质量的最小值。 后天空气质量等级 后天空气质量的等级。 后天日期 后天日期。
  • 连接参数 华为空气质量连接器使用OAuth2.0认证,连接参数说明如表1所示。 表1 连接参数说明 名称 必填 说明 示例值/默认值 连接名称 是 设置连接名称。 华为空气质量的连接 描述 否 对于连接的信息描述说明。 description client_id 是 client_id是应用的唯一标识,平台通过client_id来鉴别应用的身份。 name client_secret 是 client_secret是平台给应用分配的密钥。 -