NCS调优
对于部分运行在RC模式的产品,产品普遍存在内存较小的特点。这就导致了模型无法通过本地AOE进行调优,这样就需要用到另一种调优方式,NCS调优。
安装CANN包
- 环境准备
一台常规的Linux服务器(后文描述为Host机)和一台装有昇腾NPU的服务器(后文描述为Device机)。服务器上需要安装toolkit包,以CANN 8.0.0版本为例,toolkit包的安装方法参考对应版本的安装指南。
图1 环境准备 - 配置环境变量
- Host机
加载CANN安装路径的环境变量脚本set_env.sh, CANN安装路径以${install_path}为例。
source ${install_path}/ascend-toolkit/set_env.sh
- Device机
export LD_LIBRARY_PATH=${install_path}/latest/tools/ncs/lib64/:${install_path}/latest/runtime/lib64/:$LD_LIBRARY_PATH exportPATH=${install_path}/latest/tools/ncs/bin/:$PATH
其中install_path请配置为CANN软件的实际安装路径。
- Host机
配置密钥证书
请先确认Host机和Device机处于同一主网段,可以互相ping通。
- 在Host机中上传shell脚本,脚本如下:
DEVICE_IP=10.x.x.196 # your device ip HOST_IP=10.x.x.66#your host IP PASS_PHRASE=Ncx12345#yourpassphrase KEY_LEN=3072#[3072,4096] VALID_DAYS=365#thecertwillexpireafterthevaliddays COUNTRY=CN#yourcountrynameabbr.(2lettercode) STATE=Zhejiang#yourprovincename LOCATION=Hangzhou#yourcityname ORGANIZATION=ABC#yourcompanyname ORGANIZATION_UNIT=DEF#yoursectionname COMMON_NAME_ROOT=www.aoe.com#yourdomainname ENCRYPT_MODE=aes256#[aes256,aes128] ##########该分割线以上内容请根据实际情况修改,以下内容不建议修改。########## #generateconf rm-rfhost-ext.cnfdevice-ext.cnf echo"[ext]">>host-ext.cnf echo"subjectAltName=IP:${HOST_IP}">>host-ext.cnf echo"[ext]">>device-ext.cnf echo"subjectAltName=IP:${DEVICE_IP}">>device-ext.cnf #generaterootcert opensslreq-x509-newkeyrsa:${KEY_LEN}-days${VALID_DAYS}-nodes-keyoutca-key.pem-outca-cert.pem-subj"/C=${COUNTRY}/ST=${STATE}/L=${LOCATION}/O=${ORGANIZATION}/OU=${ORGANIZATION_UNIT}/CN=${COMMON_NAME_ROOT}"-addextkeyUsage=keyCertSign #generatedevicecertrequest opensslreq-newkeyrsa:${KEY_LEN}-nodes-keyoutdevice-key.pem-outdevice-cert.csr-subj"/C=${COUNTRY}/ST=${STATE}/L=${LOCATION}/O=${ORGANIZATION}/OU=${ORGANIZATION_UNIT}/CN=NCS" #generatedevicecert opensslx509-req-indevice-cert.csr-days${VALID_DAYS}-CAca-cert.pem-CAkeyca-key.pem-CAcreateserial-outdevice-cert.pem-extensionsext-extfiledevice-ext.cnf #generatehostcertrequest opensslreq-newkeyrsa:${KEY_LEN}-nodes-keyouthost-key.pem-outhost-cert.csr-subj"/C=${COUNTRY}/ST=${STATE}/L=${LOCATION}/O=${ORGANIZATION}/OU=${ORGANIZATION_UNIT}/CN=NCA" #generatehostcert opensslx509-req-inhost-cert.csr-days${VALID_DAYS}-CAca-cert.pem-CAkeyca-key.pem-CAcreateserial-outhost-cert.pem-extensionsext-extfilehost-ext.cnf #encrytprivatekey opensslrsa-inhost-key.pem-passoutpass:${PASS_PHRASE}-${ENCRYPT_MODE}-outhost-key.pem opensslrsa-indevice-key.pem-passoutpass:${PASS_PHRASE}-${ENCRYPT_MODE}-outdevice-key.pem
- 将Device Ip和Host Ip改成对应的ip地址,在Host机上运行该shell脚本,生成密钥证书文件。
表1 相关文件说明 文件名
作用
ca-cert.pem
根CA,需要拷贝到开发环境和运行环境上。
host-key.pem
开发环境端私钥,需要拷贝到开发环境上。
host-cert.pem
开发环境端证书,需要拷贝到开发环境上。
device-key.pem
运行环境端私钥,需要拷贝到运行环境上。
device-cert.pem
运行环境端证书,需要拷贝到运行环境上。
ca-key.pem
中间过程文件,可忽略。
ca-cert.srl
中间过程文件,可忽略。
host-cert.csr
中间过程文件,可忽略。
device-cert.csr
中间过程文件,可忽略。
host-ext.cnf
中间过程文件,可忽略。
device-ext.cnf
中间过程文件,可忽略。
- 将device-key.pem 、device-cert.pem和ca-cert.pem三个文件拷贝到Device机上,在密钥证书所在路径执行如下命令。
- Host机
akt --private_key host-key.pem --public_cert host-cert.pem --ca_cert ca-cert.pem
- Device机
akt --private_key device-key.pem --public_cert device-cert.pem --ca_cert ca-cert.pem
示例命令中的私钥文件名为:host-key.pem或者device-key.pem,设备证书文件名为:host-cert.pem或者device-cert.pem,根证书文件名为:ca-cert.pem。
- Host机
- 执行命令后,提示“Enter Password:”,请输入加密私钥的口令PASS_PHRASE(口令必须与生成私钥时的口令一致)。回显如下,表示证书导入成功。
Load cert, password, and key successfully.
执行调优
- AOE调优前,在Host机上,使用如下命令可选配置部分环境。
export TUNE_BANK_PATH={bank_path} # 指定知识库保存地址 export TE_PARALLEL_COMPILER=32 # 加速aoe调优
- 执行以下命令,使用AOE调优。
Device机:
ncs &
执行后查询NCS是否启动成功。ps -ef|grep ncs|grep -v "grep"
回显信息如下所示,代表NCS服务启动成功。ID为257435的进程是ncs守护进程,ID为257440的进程是ncs运行进程。
root257440257435007:54pts/300:00:01ncs--ipXX.XX.XX.XX--portXXXX--daemonfalse
Host机:
aoe --framework 5 --model ./model.onnx --output model --job_type 2 --ip xx.xx.xx.xx --aicore_num=1
命令中的参数说明如表2所示。更多调优参数可以参考《AOE调优工具用户指南》。
- 命令执行后,会有打印提示性能优化的比例,如图2所示,性能优化提升53%。