安装离线推理引擎包
前提条件
- 请参见准备安装及运行用户完成安装前准备。
- 在安装软件前请确保安装环境已安装推理卡或AI加速模块的驱动和固件。
- 通过准备软件包章节获取离线推理引擎包Ascend-cann-nnrt_{version}_linux-{arch}.run。
- 如果用户获取的软件包格式为*.deb或*.rpm,可参考安装和卸载CANN软件包(适用于.deb格式)或安装和卸载CANN软件包(适用于.rpm格式)进行安装。
安装步骤
获取并安装离线推理引擎包,详细安装步骤如下。
- 以软件包的安装用户登录安装环境。
- 将获取到的离线推理引擎包上传到安装环境任意路径(如“/home/package”)。
- 进入软件包所在路径。
- 执行如下命令增加对软件包的可执行权限。
chmod +x 软件包名.run
软件包名.run表示软件包名,例如离线推理引擎包Ascend-cann-nnrt_{version}_linux-{arch}.run。请根据实际包名进行替换。
- 执行如下命令校验软件包安装文件的一致性和完整性。
./软件包名.run --check
- 执行如下命令安装软件(以下命令支持--install-path=<path>等参数,具体参数说明请参见参数说明)。
./软件包名.run --install
- 离线推理引擎包支持不同用户在同一运行环境安装,但安装版本必须保持一致,不同用户所属的属组也必须和驱动运行用户所属属组相同;如果不同,请用户自行添加到驱动运行用户属组。
- 用户想使用默认签署华为企业业务最终用户许可协议(EULA)的方式安装软件包时,可以添加--quiet参数配合安装命令使用,如:./软件包名.run --install --quiet 添加该参数后会跳过7的确认操作。
- 如果以root用户安装,不允许安装在非root用户目录下。
- 如果用户未指定安装路径,则软件会安装到默认路径下,默认安装路径如下。
- root用户:“/usr/local/Ascend”
- 非root用户:“${HOME}/Ascend”
其中${HOME}为当前用户目录。软件包支持多版本安装,同一安装路径下,可以安装多个版本的软件包,不同版本的软件通过版本目录来区分。默认使用最后安装的版本(即通过软件包名/latest建立软连接到最后安装的版本)。
- 软件包安装详细日志路径如下。
- root用户:“/var/log/ascend_seclog/ascend_nnrt_install.log”
- 非root用户:“${HOME}/var/log/ascend_seclog/ascend_nnrt_install.log”
其中${HOME}为当前用户目录。
- 用户需签署华为企业业务最终用户许可协议(EULA)后进入安装流程,根据回显页面执行y或Y确认协议,输入其他任意字符为拒绝协议,确认接受协议后开始安装。若当前语言环境不满足要求,可以执行如下命令配置系统的默认语言环境。
#配置为中文(简体) export LANG=zh_CN.UTF-8 #配置为英文 export LANG=en_US.UTF-8
安装完成后,若显示如下信息,则说明软件安装成功:xxx install success
xxx表示安装的实际软件包名。
添加业务进程到Cgroup
针对Atlas 200I A2 加速模块(RC场景)和Atlas 500 A2 智能小站场景,提供了基于cgroup(Control Groups)机制的内存限制功能,当业务进程的cgroup达到特定的内存限额后,内核会尝试回收内存。添加方法如下:
在启动过程中通过getpid() 函数获取到当前进程的pid,再将其写入/sys/fs/cgroup/memory/usermemory/cgroup.procs文件中。示例代码如下,加粗部分是关键代码。
int write_task(void) { int pid = getpid(); int fd = -1; char buf[100] = {0}; int ret; fd = open("/sys/fs/cgroup/memory/usermemory/cgroup.procs", O_RDWR, S_IRUSR | S_IWUSR); if (fd < 0) { printf("can't open pidfile\n"); return (-1); } ret = sprintf(buf, "%ld", (long)getpid()); if (ret < 0) { printf("sprintf_s failed."); close(fd); return (1); } ret = write(fd, buf, strlen(buf) + 1); if (ret != (strlen(buf) + 1)) { printf("write failed, errno.\n"); close(fd); return (1); } close(fd); return 0; }