1. 前言

本文档提供的信息属于上海燧原科技有限公司和/或其子公司(以下统称“燧原”)所有,且燧原保留不经通知随时对本文档信息或对任何产品和服务做出修改的权利。本文档所含信息和本文档所引用燧原其他信息均“按原样”提供。燧原不担保信息、文本、图案、链接或本文档内所含其他项目的准确性或完整性。燧原不对本文档所述产品的可销售性、所有权、不侵犯知识产权、准确性、完整性、稳定性或特定用途适用性做任何暗示担保、保证。燧原可不经通知随时对本文档或本文档所述产品做出更改,但不承诺更新本文档。

在任何情况下,燧原不对因使用或无法使用本文档而导致的任何损害(包括但不限于利润损失、业务中断和信息损失等损害)承担责任。燧原不承担因应用或使用本文档所述任何产品或服务而产生的任何责任。

本文档所列的规格参数、性能数据和等级需使用特定芯片或计算机系统或组件来测量。经该等测试,本文档所示结果反映了燧原产品的大概性能。系统配置及软硬件版本、环境变量等的任何不同会影响实际性能,产品实际效果与文档描述存在差异的,均属正常现象。燧原不担保测试每种产品的所有参数。客户自行承担对产品适合并适用于客户计划的应用以及对应用程序进行必要测试的责任。客户产品设计的脆弱性会影响燧原产品的质量和可靠性并导致超出本文档范围的额外或不同的情况和/或要求。

燧原和燧原的标志是上海燧原科技有限公司申请和/或注册的商标。本文档并未明示或暗示地授予客户任何专利、版权、商标、集成电路布图设计、商业秘密或任何其他燧原知识产权的权利或许可。

本文档为版权所有并受全世界版权法律和条约条款的保护。未经燧原的事先书面许可,任何人不可以任何方式复制、修改、出版、上传、发布、传输或分发本文档。为免疑义,除了允许客户按照本文档要求使用文档相关信息外,燧原不授予其他任何明示或暗示的权利或许可。

燧原对本文档享有最终解释权。

1.1. 版本申明

版本 修改内容 修改时间
v1.0 初始化 2023/5/11

2. 简介

Enflame-container-toolkit 是一个容器扩展工具套件,通过这一工具套件使得燧原的GCU卡可以在docker、containerd等容器内使能。k8s-device-plugin 与enflame-container-toolkit组合使用以支撑Enflame GCU 在K8S系统内的资源调度,本文档主要描述enflame-container-toolkit的单独使用方式。

Enflame-container-toolkit依赖于以下三个条件:

  • Enflame Driver已经在OS里安装好,缺少这一步会找不到Enflame GCU加速卡;

  • Docker-ce 已经在OS里安装好;

  • 用户: root, 或者 sudo [command] , 安装需要root权限。

3. container-toolkit安装包

在topscloud/container-toolkit安装包里涵盖以下几个文件,如下:

container-toolkit_1.0.1/
├── daemon.json.template
├── enflame-container-toolkit_1.0.1_amd64.deb
├── enflame-container-toolkit_1.0.1_x86_64.rpm
├── install.sh
├── LICENSE.md
└── README.md

1) enflame-container-toolkit_1.0.1_amd64.deb 是 ubuntu 系统安装包,安装命令:

# dpkg -i enflame-container-toolkit_1.0.1_amd64.deb

2)enflame-container-toolkit_1.0.1_x86_64.rpm 是 tlinux ,centos,redhat系统安装包,安装命令:

# rpm -ivh enflame-container-toolkit_1.0.1_x86_64.rpm

3)daemon.json.template为 docker /etc/docker/daemon.json 配置模板,内容如下:

{
    "default-runtime": "enflame",
    "runtimes": {
        "enflame": {
            "path": "/usr/bin/enflame-container-runtime",
            "runtimeArgs": []
        }
    },

    "registry-mirrors": ["https://mirror.ccs.tencentyun.com", "https://docker.mirrors.ustc.edu.cn"],
    "insecure-registries": ["127.0.0.1/8"],
    "max-concurrent-downloads": 10,
    "log-driver": "json-file",
    "log-level": "warn",
    "log-opts": {
        "max-size": "10m",
        "max-file": "3"
    },
    "default-shm-size": "1G",
    "default-ulimits": {
         "memlock": { "name":"memlock", "soft":  -1, "hard": -1 },
         "stack"  : { "name":"stack", "soft": 67108864, "hard": 67108864 },
         "nofile": {"name": "nofile","soft": 65536, "hard": 65536}
    },
    "data-root": "/var/lib/docker"
}

可以根据自己的具体需求,更改daemon.json.template 的内容,然后copy到 /etc/docker下,这个配置文件会将docker的default-runtime 设置成enflame container runtime。需要注意的是考虑到安全问题,安装 enflame-container-toolkit 时,当OS 的 /etc/docker 下已经有 daemon.json 存在,则不会覆盖;

4) install.sh, 一键安装脚本, 执行 ./install.sh 会将enflame-container-toolkit自动安装到系统。

5) LICENSE.md ,版权说明;

6) README.md,readme 文件

4. 安装container-toolkit

在topscloud_xxx内执行

cd container-toolkit_x.x.x
./install.sh

以上步骤会把enflame-container-toolkit 安装进系统,例如:

topscloud_2.0.3/container-toolkit_1.0.1# ./install.sh
(Reading database ... 235488 files and directories currently installed.)
Preparing to unpack enflame-container-toolkit_1.0.1_amd64.deb ...
Unpacking enflame-container-toolkit (1.0.1) over (1.0.1) ...
Setting up enflame-container-toolkit (1.0.1) ...
[INFO] enflame-container-toolkit had been installed
[INFO] log dir: /var/log/enflame
[INFO] config dir: /etc/enflame-container-runtime
[INFO] ldconfig...
[INFO] Docker service is restarting...
[INFO] Docker service had been restarted
Processing triggers for libc-bin (2.23-0ubuntu11) ...
[INFO] systemctl restart docker

注:

1)这一步需要注意daemon.json 的内容要根据自己的实际情况按需修改,再安装进/etc/docker下,默认如果/etc/docker/daemon.json 已存在则不会覆盖;

2)要确保deamon.json 里 “default-runtime”: 为”enflame”, 不然docker识别不了enflame GCU;

3)对应的logs目录为/var/log/enflame/enflame-container-runtime,可以从这里获取container-toolkit 的运行日志信息;

5. 环境变量

enflame-container-toolkit 采用 ENFLAME_VISIBLE_DEVICES 这个环境变量挂载GCUs进容器内。

5.1. 这个变量支持的值

  • 0,1,2, GCU-0,GCU-1,GCU-2 …: 采用逗号, 分割.

  • all: 默认值,挂载所有的GCUs设备进容器内.

  • none: 全部不挂载

  • void 或 未设置,这时 enflame-container-runtime 等同 runc.

5.2. GCU挂载用例

直接docker挂载用例如下:

### all gcus
$ docker run -it --network host -e ENFLAME_VISIBLE_DEVICES=all enflame/enflame:latest /bin/bash

### gcu 0,1,2
$ docker run -it --network host -e ENFLAME_VISIBLE_DEVICES=0,1,2 enflame/enflame:latest /bin/bash

### gcu 0
$ docker run -it --network host -e ENFLAME_VISIBLE_DEVICES=0 enflame/enflame:latest /bin/bash

### enflame runtime
$ docker run -it --network host --runtime enflame  enflame/enflame:latest /bin/bash

### enflame-docker
$ enflame-docker run  -it --network host enflame/enflame:latest /bin/bash

6. 配置文件与日志

1) 配置文件路径 :/etc/enflame-container-runtime/config.toml,内容如下:

[enflame-container-cli]
debug = "/var/log/enflame/enflame-container-runtime-hook.log"
environment = []

ldconfig = "@/sbin/ldconfig.real"

[enflame-container-runtime]
# debug = "/var/log/enflame/enflame-container-runtime.log"

2)日志路径:/var/log/enflame

7. 常见问题

7.1. runc 版本

建议的 runc 最低版本为 1.0.0-rc10