云服务器内容精选

  • 静态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日志,该ERROR属于常量折叠失败,不影响结果。 图2 转换结果
  • 动态分档模型转换(可选) 如果迁移的模型有多个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。 方式二:通过查看ModelArts-Ascend代码仓库,根据每个模型的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信息
  • 注意事项 当前只有弹性云服务器(E CS )的实例支持UniAgent的操作。 操作系统使用限制 表1 UniAgent支持的Linux操作系统及版本 操作系统 版本 EulerOS 1.1 64bit 2.0 64bit CentOS 7.1 64bit 7.2 64bit 7.3 64bit 7.4 64bit 7.5 64bit 7.6 64bit 7.7 64bit 7.8 64bit 7.9 64bit 8.0 64bit Ubuntu 16.04 server 64bit 18.04 server 64bit 20.04 server 64bit 22.04 server 64bit 对于Linux x86_64服务器,支持上表中所有的操作系统及版本。 对于Linux ARM服务器,当前CentOS操作系统支持7.4/7.5/7.6版本,EulerOS操作系统支持2.0版本,Ubuntu操作系统支持18.04版本
  • 前置条件 在Cloud Operations Center进行跨账号资源的操作之前,用户需要满足一些前置条件。 用户已经开通组织(Organizations)或已经加入到一个组织中,可到组织的服务页面查看。 图1 组织服务 用户所在组织将COC设置为可信服务,可到组织页面的可信服务查看。 图2 可信服务 当前执行跨账号运维操作的账号是组织管理员或者是组织管理员所委派的委托管理员。 图3 委托管理员
  • 操作步骤 当迁移验证进度为100%后,可查看到PROCEDURE的迁移情况。 返回“对象校正”页签,选择PROCEDURE,查看各具体Schema的迁移情况。这里以PROC_REQ197为例。 单击迁移成功对象后的“查看详情”,可查看具体信息与SQL代码。 通过DAS连接 GaussDB 的Auto-ugo-gaussdbv5-tar-1实例中的“ugo ”目标库。 DAS连接实例的方法请参考新增数据库登录。 可查看到名为“ugo_ete”的Schema。 单击进入“对象列表”,可查看到名为“fe0725_v5r2_670”的存储过程。
  • 权限准备 创建评估项目,需要对源库进行预检查,Oracle为源库时预检查项如表1所示。 表1 预检查项 预检查权限 检查含义 是否必须通过 DBMS_METADATA权限 检查用户是否具有从Oracle数据库字典中检索元数据的权限,该权限用来获取Schema对象的DDL。 赋予DBA权限即可,赋权语句如下: 创建用户。 CREATE USER user IDENTIFIED BY password; 授予用户登录权限。 GRANT CONNECT TO user; 授予用户DBA权限。 GRANT DBA TO user; 必须 动态视图权限 检查用户对各种动态性能视图的访问权限,该权限用来获取数据库基础信息。 赋予DBA权限即可。 必须 schema对象数量检查 检查该用户是否有Schema对象需要评估。至少需要一个对象需要评估。 必须 DBA权限 检查用户是否有DBA(数据库管理员)的权限,才能进行后续操作。 非必须 若为“警告”,评估项目仍能创建成功,但可能由于权限不足导致部分对象无法采集。 目标数据库连接用户需要具有创建/删除/更改schema、表、程序、索引、用户、函数、视图等其他迁移对象的权限。 具体可查看权限检查报告。 用户需拥有创建UGO评估项目的对应权限。具体权限,可参见权限管理进行设置。
  • 金融/互联网行业迁移 适合银行核心交易类业务、互联网类交易业务实现从传统商业数据库到云数据库的迁移。 优势: 高语法转换率: 支持主流商业数据库到通用云数据库的自动化语法转换,通过海量业务场景下亿级别代码样本的训练,使得语法转化率达到业界优秀水准,帮助用户降本提效。 异常定位与改造建议: 对于转换出现错误的对象提供自动定位与异常根因分析,并且通过DBA知识库,对异构数据库无法适配的语法提供手工改造建议。
  • 功能简介 表1 功能简介 功能 功能介绍 文档内容 数据库评估 创建数据库评估是对源数据库进行基本信息、性能数据采集,以及特定对象类型的对象SQL采集,综合兼容性、性能、对象复杂度、使用场景等进行分析,给出源数据库分析报告,从而帮您将源数据库的schema迁移到合适的目标数据库。 数据库评估 数据库对象迁移 根据数据评估的报告内容,推荐目标数据库,创建迁移项目后,帮您转换数据库对象的语法,并通过DDL、DML和PL/SQL等语句将数据库对象从源数据库迁移到目标数据库。 数据库结构迁移 SQL审核 SQL审核功能能够帮助用户在开发阶段发现隐藏在代码中的SQL规范性、设计合理性和性能等问题,内置200+审核规则,涵盖对DML、DDL、PL/SQL等各类对象进行深度审核,且可根据业务需求对规则进行自由组合形成模板,支持GaussDB、MySQL两种数据库,可实现单语句、批量代码文件上传(自动提取SQL)、直连数据库3种审核方式,深度看护代码,避免烂SQL流入生产环境。 SQL审核
  • 统一身份认证 服务 统一身份认证服务(Identity and Access Management,简称 IAM )为UGO提供了权限管理功能。 需要拥有UGO的Administrator权限后,您才能使用UGO。如需开通该权限,请联系拥有Security Administrator权限的用户,或者申请具有UGO Administrator权限的新用户。 统一身份认证服务的更多信息,请参见《统一身份认证服务用户指南》。
  • VPC终端节点 服务 UGO依赖VPC终端节点服务(VPC Endpoint)作为目标库连接代理,用来安全地访问您的目标数据库。 当您使用UGO创建迁移项目时,您除了需要拥有UGO FullAccess权限外,也需要拥有VPC Endpoint Administrator权限或Tenant Administrator权限。UGO会为您的目标库创建VPC终端节点服务,并在您结束迁移删除项目时为您删除对应的VPC终端节点服务。 创建VPC终端节点服务不收取任何费用。UGO会为创建的VPC终端节点服务添加白名单权限控制,确保您目标库的连接安全,您也可以在VPC终端节点服务页面看到目标库相应的终端节点服务。为了保证UGO功能使用正常,请不要在迁移项目未结束时删除目标库对应的VPC终端节点服务。
  • 数据复制服务 数据库和应用迁移 UGO着重于异构数据库结构,如表结构、视图和存储过程等对象的迁移上云,解决数据库语法转换不兼容的问题。 数据复制服务(Data Replication Service)则着重于数据库毫秒级数据同步,支持同构异构数据库之间的数据传输/搬迁,降低数据库之间数据流通的复杂性,减少数据传输成本。 对于迁移方案来说,将存储过程、函数较复杂的异构数据库上云,UGO+DRS会是一个完整的闭环方案,建议同时使用。
  • 支持评估的源数据库类型和版本 表1说明了UGO支持的源数据库类型及版本。 表1 源数据库类型及版本 源数据库引擎 源数据库版本 Oracle 10g、11g、12c、18c、19c、21c MySQL 5.5、5.6、5.7、8.0 PostgreSQL 10、11、12、13、14、15 GoldenDB - Microsoft SQL Server 2012、2014、2016、2017、2019、2022 源数据库PostgreSQL、GoldenDB、Microsoft SQL Server,目前仅支持白名单用户使用。
  • 支持迁移的链路及目标库版本 表2说明了UGO支持的迁移链路,以及目标数据库的类型和版本。 表2 支持迁移的链路及目标库类型和版本 源数据库引擎 目标数据库类型和版本 Oracle RDS for MySQL 5.7版本 RDS for PostgreSQL 11、12、13、14 GaussDB(for MySQL) 8.0版本 GaussDB主备版 2.7 企业版、3.1 企业版、3.2 企业版 、3.3 企业版、8.0 企业版、8.100 企业版 GaussDB分布式版 2.7 企业版、3.2 企业版 、3.3企业版、8.0 企业版、8.100 企业版 MySQL GaussDB主备版 2.7 企业版、3.1 企业版、3.2 企业版 、8.0 企业版、 8.100 企业版 GaussDB主备版(M兼容) 8.100 企业版 GaussDB分布式版 2.7 企业版、3.2 企业版 、8.0 企业版、 8.100 企业版 PostgreSQL GaussDB主备版 3.1 企业版、3.2 企业版、 8.0 企业版、8.100 企业版 GaussDB分布式版 3.2 企业版、 8.0 企业版、8.100 企业版 GoldenDB GaussDB主备版 8.0 企业版、8.100 企业版 GaussDB分布式版 8.0 企业版、8.100 企业版 Microsoft SQL Server GaussDB主备版 3.1 企业版、3.2 企业版、 8.0 企业版、8.100 企业版 GaussDB分布式版 3.2 企业版、 8.0 企业版、8.100 企业版 GaussDB(for MySQL) 8.0版本 GaussDB 主备版-2.7 企业版包括:GaussDB 主备版-2.1 企业版/2.2 企业版/2.7 企业版。 GaussDB 分布式版-2.7 企业版包括:GaussDB 分布式版-2.1 企业版/2.2 企业版/2.7 企业版。 目标库GaussDB 8.0 企业版、8.100 企业版,目前仅支持白名单用户使用。