云服务器内容精选

  • SD WebUI推理性能测试 以下性能测试数据仅供参考。 开启Flash Attention 生成1280x1280图片,使用Ascend: 1* ascend-snt9b(64GB),约耗时7.5秒。 图1 生成图片耗时(1) 生成1280x1280图片,使用Ascend: 1* ascend-snt9b(32GB),约耗时9.3秒。 图2 生成图片耗时(2) 不开启Flash Attention 生成1280x1280图片,使用Ascend: 1* ascend-snt9b(64GB),约耗时10.1秒。 图3 生成图片耗时(3) 生成1280x1280图片,使用Ascend: 1* ascend-snt9b(32GB),约耗时14.1秒。 图4 生成图片耗时(4) 父主题: SD WEBUI套件适配PyTorch NPU的推理指导(6.3.908)
  • 步骤一 导出镜像 完成在DevServer上部署SD WebUI推理服务章节的任务后,在宿主机上执行以下命令,导出镜像。 mv /home/ma-user/sdwebui/stable-diffusion-webui/models/VAE-approx/model.pt /home/ma-user/sdwebui/stable-diffusion-webui/models/VAE-approx/vaeapprox-sdxl.pt docker commit ${container_name} sdxl-train:0.0.1
  • 步骤五 部署服务 单击AI应用名称,进入AI应用详情页,单击部署在线服务。 图7 部署在线服务 填写如下服务部署参数。 名称: 服务的名称,按照实际需要填写 是否自动停止:如果配置自动停止,服务会按照配置的时间自动停止。如果需要常驻的服务,建议关掉该按钮。 描述:按照需要填写。 资源池:选择专属资源池。若之前未购买专属资源池,具体步骤请参考创建资源池。 资源规格要求: 硬盘空间:至少200GB。 昇腾资源规格:可以申请Ascend: 1* ascend-snt9b(32GB)或Ascend: 1* ascend-snt9b(64GB)规格。请按需选择需要的规格,64GB规格的推理耗时更短。 推荐使用“西南-贵阳一”Region上的昇腾资源。 AI应用来源: 我的AI应用。 选择AI应用及其版本:此处选择上一步中创建的sdxl-webui-pytorch:0.0.1应用。 计算节点规格: 按需选择Ascend: 1* ascend-snt9b(32GB)或Ascend: 1* ascend-snt9b(64GB)。 图8 填写服务部署参数 选择开启APP认证并选择应用。 图9 开启APP认证 按照上述配置完参数后,单击“下一步”, 确认信息无误后,单击“提交”,完成服务的部署。
  • 步骤六 访问在线服务 在Chrome浏览器中安装ModHeader插件。 图10 安装ModHeader插件 Chrome浏览器安装ModHeader插件后,可能会导致访问不了ModelArts平台,访问ModelArts时需要临时禁用ModHeader插件。或者使用Edge登录ModelArts,使用Chrome安装插件访问页面。 打开ModHeader,单击添加MOD。 图11 添加MOD 选择添加Request header。 图12 添加Request header 进入在线服务详情,查看Key值和Value值。 Key值固定为X-Apig-AppCode,Value值为APP认证的app_code值,在服务调用指南tab的APP认证API处展开,进行AppCode管理设置。 图13 获取Key值和Value值 将在ModHeader插件中添加Key值和Value值。 图14 添加Key和value 进入在线服务详情页,查看APP认证方式的服务API。 图15 API接口公网地址 复制API接口公网地址,并在地址后添加"/",进行页面访问,例如: https://infer-app-modelarts-cn-southwest-2.myhuaweicloud.com/v1/infers/abc104bb-d303-4ffb-a8fa-XXXXXXXXX/ 图16 访问在线服务 输入Prompt,修改所需要的请求参数(如Width、Height),进行Prompt请求。 图17 填写请求参数 表1 SDXL模型参数及其含义 参数名称 说明 是否必选 默认值 prompt 提示词,根据提示词生成含有对应内容的图像 是 无 negative_prompt 反向提示词,图像生成过程中应避免的提示 否 无 num_inference_steps 推理步骤数,控制推理的步数 否 40 height 生成图像的纵向分辨率 否 1024 width 生成图像的横向分辨率 否 1024 high_noise_frac 高噪声比例,即基础模型跑的步数占总步数的比例 否 0.8 refiner_switch 是否使用细化模型refiner 否 true(使用) seed 随机种子,控制生成图像的多样性 否 无 您可在ModelArts控制台查看相关日志。 图18 查看相关日志 首次请求时会进行模型加载,耗时较长,因此第一个请求可能超时,第二个请求将会正常,请耐心等待。
  • 步骤四 创建AI应用 在ModelArts的AI应用页面,进行AI应用创建。 图3 创建AI应用 填写如下参数信息。 名称:AI应用的名称,请按照实际应用名填写。 版本:版本描述,请按照实际填写。 元模型来源:注意此处选择“从容器镜像选择”。 容器镜像所在路径:单击文件夹标签,选择已经制作好的镜像。 容器调用接口参数:根据镜像实际提供的协议和端口填写,本案例中的SDXL镜像提供HTTP服务和8183端口。 图4 填写参数(1) 系统运行架构: 选择ARM. 推理加速卡:无。 部署类型: 在线服务。 请求模式:同步请求。 启动命令: source /etc/bashrc && python3 launch.py --skip-torch-cuda-test --port 8183 --enable-insecure-extension-access --listen --log-startup --disable-safe-unpickle --skip-prepare-environment --api 按照上述配置完参数后,单击右下角的立即创建, 完成AI应用的创建。 图5 填写参数(2) 当AI应用状态变为正常时,表示创建完成。 图6 AI应用创建完成
  • 步骤三 启动 自定义镜像 执行以下命令启动自定义镜像。 docker run -itd --name ${container_name} -p 8183:8183 -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /etc/localtime:/etc/localtime -v /usr/local/Ascend/driver:/usr/local/Ascend/driver -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi --shm-size 60g --device=/dev/davinci_manager --device=/dev/hisi_hdc --device=/dev/devmm_svm --device=/dev/davinci0 --security-opt seccomp=unconfined --network=bridge sdxl-train:0.0.1 bash
  • 步骤一 准备环境 请参考DevServer资源开通,购买DevServer资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 购买DevServer资源时如果无可选资源规格,需要联系华为云技术支持申请开通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。 检查环境。 SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。 npu-smi info 如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装固件和驱动,或释放被挂载的NPU。 检查docker是否安装。 docker -v #检查docker是否安装 如尚未安装,运行以下命令安装docker。 yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64 配置IP转发,用于容器内的网络访问。执行以下命令查看net.ipv4.ip_forward配置项的值,如果为1,可跳过此步骤。 sysctl -p | grep net.ipv4.ip_forward 如果net.ipv4.ip_forward配置项的值不为1,执行以下命令配置IP转发。 sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf sysctl -p | grep net.ipv4.ip_forward、
  • 步骤四 进入容器运行 进入容器后执行启动命令。 docker exec -it ${container_name} bash python3 launch.py --port 8183 --skip-torch-cuda-test --enable-insecure-extension-access --listen --log-startup --disable-safe-unpickle --api 等待克隆仓库,下载依赖模型,启动成功后显示如图1所示。 图1 启动成功后显示 如果在安装编译handrefinerportable时出错,则需手动下载whl包: wget https://github.com/huchenlei/HandRefinerPortable/releases/download/v1.0.1/handrefinerportable-2024.2.12.0-py2.py3-none-any.whl pip install handrefinerportable-2024.2.12.0-py2.py3-none-any.whl --no-deps 如果启动不成功,验证PyTorch版本,需要torch==2.1.0。 pip list | grep torch #如果不是2.1.0版本,请重新安装 pip uninstall torch pip install torch==2.1.0 验证效果。 新开启一个终端,执行以下命令。 curl --noproxy '*' -kv -X POST localhost:8183/sdapi/v1/txt2img -H "Content-Type: application/json" -d '{"prompt":"ultrarealistic shot of a furry blue bird"}' 执行成功显示: 图2 执行成功显示 在浏览器输入http://{宿主机ip}:8183,可以访问前端页面,通过输入文字生成图片。 图3 输入文字生成图片 注意需要勾选Enable Flash Attention按钮。 图4 Enable Flash Attention优化按钮
  • 软件配套版本 本方案支持的软件配套版本和依赖包获取地址如表1所示。 表1 软件配套版本和获取地址 软件名称 说明 下载地址 插件代码包 AscendCloud-3rdAIGC-6.3.908-xxx.zip 文件名中的xxx表示具体的时间戳,以包名的实际时间为准。 获取路径:Support-E 说明: 如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。
  • 镜像版本 本教程中用到基础镜像地址和配套版本关系如下表所示,请提前了解。 表2 基础容器镜像地址 镜像用途 镜像地址 Cann版本 基础镜像 swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc3-py_3.9-hce_2.0.2312-aarch64-snt9b-20240824153350-cebb080 cann_8.0.rc3
  • Step1 准备环境 请参考DevServer资源开通,购买DevServer资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。 SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。 npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态 npu-smi info -l | grep Total # 在每个实例节点上运行此命令可以看到总卡数 如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装固件和驱动,或释放被挂载的NPU。 检查docker是否安装。 docker -v #检查docker是否安装 如尚未安装,运行以下命令安装docker。 yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64 配置IP转发,用于容器内的网络访问。执行以下命令查看net.ipv4.ip_forward配置项的值,如果为1,可跳过此步骤。 sysctl -p | grep net.ipv4.ip_forward 如果net.ipv4.ip_forward配置项的值不为1,执行以下命令配置IP转发。 sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf sysctl -p | grep net.ipv4.ip_forward
  • Step3 启动容器镜像 启动容器镜像。启动前请先按照参数说明修改${}中的参数。 export work_dir="自定义挂载的工作目录" export container_work_dir="自定义挂载到容器内的工作目录" export container_name="自定义容器名称" export image_name="镜像名称或ID" // 启动一个容器去运行镜像 docker run -itd --net=bridge \ -p 8080:8080 \ --device=/dev/davinci0 \ --device=/dev/davinci_manager \ --device=/dev/devmm_svm \ --device=/dev/hisi_hdc \ --shm-size=32g \ -v /usr/local/dcmi:/usr/local/dcmi \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /var/log/npu/:/usr/slog \ -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \ -v ${work_dir}:${container_work_dir} \ --name ${container_name} \ ${image_name} \ /bin/bash 参数说明: -v ${work_dir}:${container_work_dir}:代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统。work_dir为宿主机中工作目录,目录下存放着训练所需代码、数据等文件。container_work_dir为要挂载到的容器中的目录。为方便两个地址可以相同。 容器不能挂载到/home/ma-user目录,此目录为ma-user用户家目录。如果容器挂载到/home/ma-user下,拉起容器时会与基础镜像冲突,导致基础镜像不可用。 driver及npu-smi需同时挂载至容器。 --name ${container_name}:容器名称,进入容器时会用到,此处可以自己定义一个容器名称。 -p 8080:8080:开启一个端口,可以web访问(如冲突,可自行更换其他端口)。 ${image_name}:容器镜像的名称。 通过容器名称进入容器中。默认使用ma-user用户,后续所有操作步骤都在ma-user用户下执行。 docker exec -it ${container_name} bash
  • Step5 训练Wav2Lip模型 准备预训练模型。下载需要使用的预训练模型。 人脸检测预训练模型,下载链接。 专家唇形同步鉴别器,下载链接 ,此链接是官方提供的预训练模型。训练Wav2Lip模型时需要使用专家唇形同步鉴别器,用户可以用自己的数据训练,也可以直接使用官方提供的预训练模型。 处理初始视频数据集。 将下载好的人脸检测预训练模型修改名字为s3fd.pth,上传到/home/ma-user/Wav2Lip/face_detection/detection/sfd/s3fd.pth目录。 下载LRS2数据集。数据集文件夹结构如下: ├── LRS2_partly | ├── main | │ ├── five-digit numbered video IDs ending with (.mp4) | │ ├── 00001.mp4 | │ ├── 00002.mp4 对数据集进行预处理。具体命令如下。 python preprocess.py --data_root ./LRS2_partly --preprocessed_root lrs2_preprocessed/ data_root参数为原始视频根目录,preprocessed_root参数为处理后生成的数据集目录。 处理后数据目录如下所示。 preprocessed_root (lrs2_preprocessed) ├── main | ├── Folders with five-digit numbered video IDs(00001) | │ ├── *.jpg | │ ├── audio.wav | ├── 00001 | │ ├── *.jpg | │ ├── audio.wav 将LRS2文件列表中的.txt文件(train、val)放入该filelists文件夹中。 图2 filelists文件夹 train.txt和val.txt内容参考如下,为处理后视频数据的目录名字。 图3 train.txt和val.txt内容 训练专家唇形同步鉴别器。 如果使用LRS2数据集,可选择跳过此步骤。如果使用自己的数据集,训练命令参考如下。 python color_syncnet_train.py --data_root ./lrs2_preprocessed/main/ --checkpoint_dir ./savedmodel/syncnet_model/ --checkpoint_path ./checkpoints/lipsync_expert.pth 参数说明: --data_root :处理后的视频数据目录,与train.txt内容拼接后得到单个数据目录,例如:lrs2_preprocessed/main/00001。 --checkpoint_dir :此目录用于保存模型。 -checkpoint_path :(可选)可基于此目录的lipsync_expert模型继续进行训练,如果重新训练则不需要此参数。 默认每10000 step保存一次模型。 训练Wav2Lip模型。 训练Wav2Lip模型时需要使用专家唇形同步鉴别器。可以使用上一步3中的训练结果,也可以直接下载官方提供的预训练权重来使用。 具体训练命令如下。 python wav2lip_train.py --data_root ./lrs2_preprocessed/main/ --checkpoint_dir ./savedmodel --syncnet_checkpoint_path ./checkpoints/lipsync_expert.pth --checkpoint_path ./checkpoints/wav2lip.pth 首次训练会进行模型评估,默认为700 step,请耐心等待,结束之后会进行正式训练。 参数说明: --data_root :处理后的视频数据目录,与train.txt内容拼接后得到单个数据目录,例如:lrs2_preprocessed/main/00001。 --checkpoint_dir :此目录用于保存模型。 --syncnet_checkpoint_path :专家鉴别器的目录。 --checkpoint_path :(可选)可基于此目录的Wav2Lip模型继续进行训练,如果重新训练则不需要此参数。 默认每3000 step保存一次模型。 注: 专家鉴别器的评估损失应降至约 0.25,Wav2Lip评估同步损失应降至约 0.2,以获得良好的结果。 可以在文件设置其他不太常用的超参数hparams.py,常用超参如下: nepochs 训练总步数 checkpoint_interval Wav2Lip模型保存间隔步数 eval_interval Wav2Lip模型评估间隔步数 syncnet_eval_interval 专家鉴别器模型评估间隔步数 syncnet_checkpoint_interval 专家鉴别器模型保存间隔步数
  • 获取软件和镜像 表2 获取软件和镜像 分类 名称 获取路径 插件代码包 AscendCloud-6.3.907-xxx.zip软件包中的AscendCloud-AIGC-6.3.907-xxx.zip 说明: 包名中的xxx表示具体的时间戳,以包名的实际时间为准。 获取路径:Support-E 说明: 如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。 基础镜像 西南-贵阳一: swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc2-py_3.9-hce_2.0.2312-aarch64-snt9b-20240727152329-0f2c29a 从SWR拉取。
  • Step4 安装依赖和软件包 从github拉取Wav2Lip代码。 cd /home/ma-user git clone https://github.com/Rudrabha/Wav2Lip.git cd /home/ma-user/Wav2Lip git reset --hard f361e9527b917a435928a10 如果出现报错SSL certificate problem: self signed certificate in certificate chain 图1 报错SSL certificate problem 可采取忽略SSL证书验证:使用以下命令来克隆仓库,它将忽略SSL证书验证。 git clone -c http.sslVerify=false https://github.com/Rudrabha/Wav2Lip.git 安装Wav2Lip Ascend软件包。 将获取到的Wav2Lip Ascend软件包AscendCloud-AIGC-*.zip文件上传到容器的/home/ma-user目录下。获取路径:Support网站。 解压AscendCloud-AIGC-*.zip文件,解压后将里面指定文件与对应Wave2Lip文件进行替换。 cd /home/ma-user unzip AscendCloud-AIGC-*.zip -d ./AscendCloud cp AscendCloud/multimodal_algorithm/Wav2Lip/train/f361e9527b917a435928a10/* /home/ma-user/Wav2Lip/ rm -rf AscendCloud* AscendCloud-AIGC-*.zip后面的*表示时间戳,请按照实际替换。 要替换的文件目录结构如下所示: |---Wav2Lip_code/ --- requirements.txt #建议的依赖包版本 注:需要对以下文件进行修改 --- color_syncnet_train.py #训练expert discriminator唇形同步鉴别器 --- wav2lip_train.py #训练 Wav2Lip 模型 --- preprocess.py #对初始视频数据进行推理 在以上三个文件内import末尾增加import如下: import torch_npu from torch_npu.contrib import transfer_to_npu 安装Python依赖包,文件为requirements.txt文件。 pip install -r requirements.txt