4.1 天数智芯
本次大赛使用天数智芯 TY1100-NX 平台扩展本地 AI 推理能力。TY1100-NX 已集成天数智芯算力模块,开发者无需自行拆装加速设备。赛事设备默认运行 Debian 12,并预装与当前系统匹配的 CoreX 软件栈及 ARM64 大模型推理镜像。
项目 |
赛事环境 |
|---|---|
开发平台 |
TY1100-NX |
CPU 架构 |
ARM64 / AArch64 |
操作系统 |
Debian 12 |
软件栈 |
CoreX 4.4.0 |
默认安装目录 |
/usr/local/corex |
容器运行工具 |
nerdctl + containerd |
推荐推理方式 |
天数 ARM64 大模型推理容器 |
推荐推理框架 |
天数适配版 vLLM |
本章以赛事设备中已经预置的 ARM64 大模型推理镜像为基础,介绍 CoreX 环境检查、推理容器启动、模型运行、OpenAI 兼容接口以及 Agent 应用接入方法。
参赛作品中,天数算力设备主要负责模型推理。Agent Workflow 编排、任务状态管理、工具调用、数据处理、记忆、RAG 和结果反馈等能力仍应由参赛作品实现。仅启动本地模型聊天服务,不等同于完成 Agentic AI 作品。
4.1.1 CoreX 和容器环境检查
赛事提供的 TY1100-NX 系统镜像已经预装与当前系统匹配的 CoreX 驱动、Runtime 和设备管理工具。开发者通常无需自行安装或升级驱动。
4.1.1.1 检查系统架构
执行:
uname -m
正常情况下应输出:
aarch64
4.1.1.2 检查 CoreX 安装目录
执行:
ls -ld /usr/local/corex
当前赛事环境中,/usr/local/corex 通常为指向当前 CoreX 版本目录的软链接,例如:
/usr/local/corex -> /usr/local/corex-4.4.0/
如果 /usr/local/corex 不存在,说明当前系统环境可能不完整,应联系赛事技术支持恢复官方系统环境。
4.1.1.3 检查天数设备
执行:
command -v ixsmi
ixsmi
正常情况下,ixsmi 应能够识别天数算力设备,并显示以下信息:
驱动和 Runtime 版本;
设备内存及使用量;
设备利用率;
温度;
功耗;
当前运行进程;
设备错误状态。
如果当前终端无法找到 ixsmi,可以临时加载 CoreX 环境:
export PATH="/usr/local/corex/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/corex/lib64:${LD_LIBRARY_PATH:-}"
ixsmi
如果 ixsmi 能够执行但无法识别设备,可先重新启动系统:
sudo reboot
重新启动后仍无法识别设备时,应停止后续模型部署操作,并联系赛事技术支持。
开发者不要自行执行以下操作:
安装其他版本或其他平台的 CoreX 驱动;
升级系统内核;
强制卸载 CoreX 内核模块;
修改设备固件;
调整设备底层频率或功耗参数。
4.1.1.4 检查容器运行环境
当前 TY1100-NX 系统使用 nerdctl 和系统级 containerd 管理容器,不使用 Docker daemon 作为主要容器运行方式。
检查 nerdctl:
command -v nerdctl
nerdctl --version
检查系统级 containerd:
sudo nerdctl info
正常情况下,应能看到 Server Version、Storage Driver、Cgroup Driver、Architecture 等信息。
普通用户直接执行:
nerdctl info
可能出现 rootless containerd 未启动的提示。该现象不表示系统级 containerd 异常。本指南后续统一使用:
sudo nerdctl
不要将以下两种方式混用:
docker ...
sudo nerdctl ...
当前系统虽然可能安装 Docker CLI,但 Docker daemon 默认未运行,执行 docker images 或 docker run 可能出现:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock
此时应使用 sudo nerdctl,不要为完成本章操作自行启动或重新配置 Docker daemon。
4.1.2 检查赛事推理镜像
4.1.2.1 查看已有镜像
执行:
sudo nerdctl images
当前赛事设备中已经预置与 CoreX 4.4.0 匹配的 ARM64 大模型推理镜像。本章使用以下镜像:
harbor.iluvatar.com.cn:10443/saas/mr-bi150-4.4.0-aarch64-ubuntu20.04-py3.10-poc-llm-infer:v1.2.4-202605280001-ty1100-4.4.0
该镜像与以下环境匹配:
ARM64 / AArch64;
TY1100-NX;
CoreX 4.4.0;
Python 3.10;
天数适配版大模型推理环境。
设备中可能同时存在旧版 CoreX 4.3.x 镜像或其他应用镜像。使用时应优先选择与当前 CoreX 4.4.0 环境匹配的镜像,不要使用旧版 4.3.x 镜像作为赛事默认环境。
4.1.2.2 设置镜像变量
执行:
export TIANSHU_IMAGE="harbor.iluvatar.com.cn:10443/saas/mr-bi150-4.4.0-aarch64-ubuntu20.04-py3.10-poc-llm-infer:v1.2.4-202605280001-ty1100-4.4.0"
检查变量:
echo "$TIANSHU_IMAGE"
检查镜像是否存在:
sudo nerdctl image inspect "$TIANSHU_IMAGE" \
>/dev/null 2>&1 \
&& echo "推理镜像检查通过"
如果没有显示“推理镜像检查通过”,再次执行:
sudo nerdctl images
确认镜像完整名称和 Tag 是否正确。
赛事设备已经预置该镜像时,无需重复拉取。若重新烧录系统后镜像缺失,应通过赛事资源包或赛事技术支持恢复,不建议自行使用其他 CoreX Release 的镜像替代。
4.1.2.3 检查已有容器
执行:
sudo nerdctl ps -a
部分赛事设备中可能已经创建 vllm_test、vllm_embed 等测试容器。
如果存在 vllm_test,可以直接进入:
sudo nerdctl start -ai vllm_test
如果容器状态为 Created,表示容器已经创建但尚未运行,可以通过上述命令启动。
已有测试容器的挂载目录和启动参数可能不同。进入容器后应先检查其 README、模型目录和软件版本,不要直接假定模型已经准备完成。
4.1.3 创建并进入推理容器
如果设备中没有可直接使用的测试容器,可以按照本节新建容器。
4.1.3.1 准备模型目录
在宿主机创建模型目录:
sudo mkdir -p /opt/models
sudo chown -R "$USER":"$USER" /opt/models
检查存储空间:
df -h /opt/models
将完整模型目录放入:
/opt/models
例如:
/opt/models/Qwen2.5-7B-Instruct
模型目录通常应包括:
config.json
tokenizer.json
tokenizer_config.json
generation_config.json
model*.safetensors
model.safetensors.index.json
不同模型的文件组成可能不同,应以模型仓库中的 README 为准。模型权重、Tokenizer 和配置文件必须属于同一个模型版本。
4.1.3.2 创建容器
删除可能存在的同名旧容器:
sudo nerdctl rm -f ty1100-llm 2>/dev/null || true
创建并进入推理容器:
sudo nerdctl run -it \
--name ty1100-llm \
--privileged \
--net host \
--shm-size 8g \
-v /opt/models:/models \
"$TIANSHU_IMAGE" \
/bin/bash
主要参数说明如下:
参数 |
说明 |
|---|---|
–name ty1100-llm |
设置容器名称 |
–privileged |
允许容器访问天数算力设备和相关驱动 |
–net host |
容器与宿主机共用网络 |
–shm-size 8g |
设置容器共享内存 |
-v /opt/models:/models |
将宿主机模型目录挂载至容器 |
“$TIANSHU_IMAGE” |
使用赛事指定推理镜像 |
/bin/bash |
进入容器终端 |
当前 TY1100-NX 系统内存约为 16 GB,不建议将 –shm-size 直接设置为 16 GB。模型规模、并发数和上下文较小时,也可以适当降低共享内存。
4.1.3.3 重新进入已有容器
退出容器后,如需再次进入,执行:
sudo nerdctl start ty1100-llm
sudo nerdctl exec -it ty1100-llm /bin/bash
查看容器状态:
sudo nerdctl ps -a
停止容器:
sudo nerdctl stop ty1100-llm
4.1.4 检查容器推理环境
进入容器后,首先执行以下检查。
4.1.4.1 检查设备
ixsmi
容器内应能正常识别天数算力设备。
4.1.4.2 检查 PyTorch 和 vLLM
执行:
python3 - <<'PY'
import torch
print("torch version:", torch.__version__)
print("cuda available:", torch.cuda.is_available())
print("device count:", torch.cuda.device_count())
PY
正常情况下:
torch.cuda.is_available() 返回 True;
torch.cuda.device_count() 大于 0。
为避免公开输出具体算力芯片型号,不建议在公开日志中执行:
torch.cuda.get_device_name(0)
检查 vLLM:
python3 - <<'PY'
import vllm
print("vllm version:", vllm.__version__)
PY
检查主要 Python 软件包:
python3 -m pip list \
| grep -Ei \
"torch|vllm|transformers|corex"
不要在赛事推理容器中直接执行:
pip install --upgrade torch
pip install --upgrade vllm
pip install --upgrade transformers
普通 PyPI 软件包可能覆盖天数适配版本,导致:
无法识别算力设备;
天数定制算子缺失;
动态库版本冲突;
vLLM 启动失败;
模型回退到 CPU;
原有容器环境损坏。
4.1.4.3 查看镜像说明
查找 README:
find /root /workspace /opt \
-maxdepth 3 \
-iname "README*" \
2>/dev/null
如果找到镜像说明,应优先阅读:
cat /root/README.md
如果文件位于其他位置,应将路径替换为实际路径。
不同镜像构建版本中的 vLLM 启动入口、参数、模型支持范围和已知问题可能不同,应以镜像内 README 和当前命令帮助为准。
4.1.4.4 检查模型目录
执行:
ls -lah /models
查看模型关键文件:
find /models \
-maxdepth 2 \
-type f \
\( \
-name "config.json" \
-o -name "tokenizer.json" \
-o -name "*.safetensors" \
\) \
| head -n 30
如果 /models 为空,应检查:
宿主机 /opt/models 中是否存在模型;
-v /opt/models:/models 参数是否正确;
模型目录和文件权限是否正常。
4.1.5 运行最小离线推理
进入容器后,先查看实际模型目录:
ls -lah /models
根据实际模型目录名称设置变量。以下示例中的 your-model-directory 必须修改为真实目录名称:
MODEL_DIR_NAME="your-model-directory"
export MODEL_PATH="/models/$MODEL_DIR_NAME"
检查模型配置:
test -f "$MODEL_PATH/config.json" \
&& echo "模型目录检查通过" \
|| echo "未找到模型配置,请检查 MODEL_PATH"
创建测试程序:
cat > /tmp/ty_vllm_test.py <<'PY'
import os
import sys
from vllm import LLM, SamplingParams
model_path = os.getenv("MODEL_PATH")
if not model_path:
print("缺少环境变量 MODEL_PATH", file=sys.stderr)
raise SystemExit(1)
sampling_params = SamplingParams(
max_tokens=128,
temperature=0.7,
top_p=0.9,
)
llm = LLM(
model=model_path,
tensor_parallel_size=1,
max_model_len=2048,
gpu_memory_utilization=0.85,
dtype="auto",
)
outputs = llm.generate(
["请用一句话介绍你自己。"],
sampling_params,
)
if not outputs or not outputs[0].outputs:
print("模型未返回有效结果", file=sys.stderr)
raise SystemExit(2)
print(outputs[0].outputs[0].text)
PY
运行:
MODEL_PATH="$MODEL_PATH" \
python3 /tmp/ty_vllm_test.py
主要参数说明如下:
参数 |
说明 |
|---|---|
tensor_parallel_size=1 |
使用单个算力设备 |
max_model_len=2048 |
首次验证使用较短上下文 |
gpu_memory_utilization=0.85 |
为系统预留部分设备内存 |
dtype=”auto” |
由框架根据模型和环境选择数据类型 |
max_tokens=128 |
最多生成 128 个 Token |
如果模型要求执行远程模型代码,应先检查模型来源和相关代码,再根据模型 README 决定是否增加:
trust_remote_code=True
不要对来源不明的模型直接启用该选项。
如果上述 Python 接口与镜像版本不兼容,应以镜像 README 和当前 vLLM 版本说明为准,不要直接升级 vLLM。
4.1.6 启动 OpenAI 兼容服务
4.1.6.1 查看当前 vLLM 启动入口
先执行:
python3 -m \
vllm.entrypoints.openai.api_server \
--help
如果当前版本不支持该入口,再检查:
vllm serve --help
实际使用的启动入口和参数应以当前镜像帮助信息为准。
4.1.6.2 仅供当前设备访问
当 Agent 应用和 vLLM 服务均运行在同一台 TY1100-NX 上时,可以仅监听本机地址:
python3 -m \
vllm.entrypoints.openai.api_server \
--model "$MODEL_PATH" \
--served-model-name local-model \
--host 127.0.0.1 \
--port 12345 \
--tensor-parallel-size 1 \
--max-model-len 2048 \
--gpu-memory-utilization 0.85
4.1.6.3 供局域网其他设备访问
如果 Agent 应用运行在另一台 CIX P1 设备上,应让服务监听所有网络接口:
python3 -m \
vllm.entrypoints.openai.api_server \
--model "$MODEL_PATH" \
--served-model-name local-model \
--host 0.0.0.0 \
--port 12345 \
--tensor-parallel-size 1 \
--max-model-len 2048 \
--gpu-memory-utilization 0.85
主要参数说明如下:
参数 |
说明 |
|---|---|
–model |
模型目录 |
–served-model-name |
OpenAI 接口使用的模型名称 |
–host 127.0.0.1 |
仅允许当前设备访问 |
–host 0.0.0.0 |
允许局域网其他设备访问 |
–port 12345 |
服务端口 |
–tensor-parallel-size 1 |
使用单个算力设备 |
–max-model-len 2048 |
最大上下文长度 |
–gpu-memory-utilization 0.85 |
设备内存利用比例 |
使用 –host 0.0.0.0 时,服务会监听所有网络接口。该方式仅适用于可信的赛事局域网,应通过防火墙和网络隔离限制访问来源,不要将模型服务直接暴露至公网。
4.1.7 验证 OpenAI 兼容接口
在模型服务所在设备上另开一个终端。
查询模型列表:
curl -sS \
http://127.0.0.1:12345/v1/models \
| python3 -m json.tool
发送 Chat Completions 请求:
curl -sS \
http://127.0.0.1:12345/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "local-model",
"messages": [
{
"role": "user",
"content": "请只回复:天数本地模型接入成功"
}
],
"max_tokens": 64,
"stream": false
}' \
| python3 -m json.tool
如果能够正常返回文本,说明:
vLLM 服务已经启动;
模型已经成功加载;
OpenAI 兼容接口可以访问;
天数算力设备可以作为本地模型 Provider 使用。
本地模型服务通常不要求真实 API Key。部分客户端强制要求填写 API Key 时,可以使用无敏感含义的占位值:
EMPTY
4.1.8 接入 CIX P1 Agent 应用
根据 Agent 应用和模型服务的部署位置选择 Base URL。
情况一:Agent 和 vLLM 运行在同一台 TY1100-NX 上
Base URL 使用:
http://127.0.0.1:12345/v1
127.0.0.1 表示当前设备自身,适用于 Agent 应用和模型服务部署在同一台设备上的场景。
情况二:Agent 运行在另一台 CIX P1 设备上
先在 TY1100-NX 上查询局域网 IP:
hostname -I
假设 TY1100-NX 的局域网 IP 为:
192.168.1.105
则 Agent 应使用:
http://192.168.1.105:12345/v1
跨设备访问时,应确保:
vLLM 服务使用 –host 0.0.0.0 启动;
两台设备位于可以互相访问的网络中;
服务端口没有被防火墙阻断;
Base URL 使用 TY1100-NX 的实际局域网 IP,而不是访问端设备自身的 127.0.0.1。
对于支持 OpenAI 兼容接口的 Agent 框架,通常配置:
配置项 |
配置值 |
|---|---|
Base URL |
根据上述部署方式填写 |
API Key |
EMPTY |
Model |
local-model |
建议在 Agent 项目的独立虚拟环境中安装 OpenAI SDK:
python3 -m venv ~/agent-venv
source ~/agent-venv/bin/activate
python3 -m pip install "openai>=1,<2"
Python 示例:
from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:12345/v1",
api_key="EMPTY",
timeout=120.0,
)
response = client.chat.completions.create(
model="local-model",
messages=[
{
"role": "user",
"content": "请只回复:天数本地模型接入成功",
}
],
max_tokens=64,
stream=False,
)
content = response.choices[0].message.content
if not content:
raise RuntimeError("模型未返回文本内容")
print(content)
如果 Agent 运行在另一台设备上,应将示例中的 127.0.0.1 替换为 TY1100-NX 的实际局域网 IP。
推荐按照以下顺序完成接入:
在 TY1100-NX 本机通过 curl 验证模型接口;
从 Agent 所在设备验证网络和接口访问;
使用 OpenAI Python SDK 验证调用;
接入 Agent 框架;
增加工具调用;
增加记忆或 RAG;
最后增加流式输出、多模态和并发能力。
Agent 应限制:
最大任务步骤数;
单次任务模型调用次数;
最大输入长度;
最大生成长度;
工具调用超时时间;
模型请求超时时间;
模型和工具重试次数。
避免模型或工具异常时进入无限循环。
4.1.9 性能测试和设备监控
4.1.9.1 监控设备状态
模型加载和推理期间,可以执行:
watch -n 1 ixsmi
重点观察:
设备内存占用;
设备利用率;
温度;
功耗;
当前推理进程;
设备错误状态。
在公开文档、截图和测试报告中,应隐藏或裁剪具体芯片型号、内部代号以及不需要公开的设备标识。
4.1.9.2 服务预热
正式测试前,先执行一次预热请求:
curl -sS \
http://127.0.0.1:12345/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "local-model",
"messages": [
{
"role": "user",
"content": "请用一句话介绍你自己。"
}
],
"max_tokens": 64,
"stream": false
}' \
>/dev/null
4.1.9.3 测试端到端时间
执行:
time curl -sS \
http://127.0.0.1:12345/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "local-model",
"messages": [
{
"role": "user",
"content": "请说明端侧智能体的三个主要特点。"
}
],
"max_tokens": 128,
"stream": false
}' \
>/tmp/ty-response.json
查看响应:
python3 -m json.tool \
/tmp/ty-response.json
如果当前 vLLM 版本提供 Benchmark 工具,可以先查看:
vllm bench serve --help
不同 vLLM 版本的 Benchmark 参数可能不同,正式测试前应以当前镜像帮助信息为准。
4.1.9.4 建议记录的指标
指标 |
说明 |
|---|---|
模型加载时间 |
从启动服务到模型能够接受请求的时间 |
TTFT |
从发送请求到收到首个 Token 的时间 |
Prefill Tokens/s |
输入 Token 处理速度 |
Decode Tokens/s |
输出 Token 生成速度 |
E2E Latency |
完整请求端到端延迟 |
E2E Throughput |
多请求场景整体吞吐 |
设备内存占用 |
模型加载和推理期间的设备内存 |
设备利用率 |
模型推理期间的计算负载 |
功耗 |
模型推理期间的设备功耗 |
温度 |
模型推理期间的设备温度 |
并发数 |
同时处理的请求数量 |
稳定性 |
连续运行期间是否出现错误或退出 |
正式比较时,应固定:
CoreX 和推理镜像版本;
模型名称和版本;
模型权重格式;
上下文长度;
输入 Token 数;
生成 Token 数;
并发数;
服务参数;
系统负载;
散热和环境温度。
不同模型、不同镜像和不同参数下的结果不能直接横向比较。
4.1.10 常见问题
问题现象 |
处理建议 |
|---|---|
uname -m 不是 aarch64 |
当前不是 TY1100-NX ARM64 环境,检查设备和系统镜像 |
/usr/local/corex 不存在 |
当前系统环境可能不完整,联系赛事技术支持恢复 |
ixsmi 不存在 |
检查 /usr/local/corex/bin 和 PATH |
ixsmi 可以执行但无法识别设备 |
重新启动系统;仍失败时保存输出并联系赛事技术支持 |
nerdctl info 提示 rootless containerd 未运行 |
使用 sudo nerdctl info 访问系统级 containerd |
docker images 无法连接 Docker daemon |
当前系统不使用 Docker daemon,改用 sudo nerdctl images |
sudo nerdctl images 输出两次相同结果 |
sudo nerdctl images 默认查询 default namespace,与 sudo nerdctl -n default images 相同 |
推理镜像不存在 |
检查完整镜像名称和 Tag;必要时联系赛事技术支持恢复 |
容器状态为 Created |
使用 sudo nerdctl start -ai 容器名称 启动 |
提示容器名称已存在 |
删除旧容器或更换名称 |
容器内无法执行 ixsmi |
确认宿主机正常,并使用 –privileged 创建容器 |
容器内看不到模型目录 |
检查 /opt/models、挂载参数和文件权限 |
torch.cuda.is_available() 返回 False |
检查是否使用赛事指定镜像及 CoreX 4.4.0 环境 |
无法导入 vLLM |
确认使用赛事 LLM 推理镜像,不要安装普通 PyPI vLLM 覆盖环境 |
模型目录缺少 config.json |
模型下载或复制不完整 |
模型加载提示 trust_remote_code |
检查模型来源和代码后,再决定是否开启 |
模型加载时设备内存不足 |
使用更小模型,降低上下文、并发数或设备内存利用率 |
服务启动后长时间无响应 |
模型可能仍在加载,检查服务日志、ixsmi 和设备内存 |
/v1/models 返回 404 |
检查 vLLM 启动入口、端口和当前版本支持的接口 |
Chat Completions 提示模型不存在 |
使用 /v1/models 返回的模型名称,或检查 –served-model-name |
TY1100-NX 本机可访问,其他设备无法访问 |
使用 –host 0.0.0.0,并检查 IP、端口、防火墙和网络 |
模型有输出但设备利用率没有变化 |
检查模型是否实际使用天数算力设备或是否回退到 CPU |
输出乱码或质量异常 |
检查 Tokenizer、Prompt Template、模型版本和权重完整性 |
性能结果波动较大 |
固定模型、输入、并发、软件版本、温度和后台负载 |
温度、功耗或设备状态异常 |
立即停止压力任务并联系赛事技术支持 |
公开截图中出现具体设备型号 |
发布前裁剪或隐藏设备名称和内部标识 |
天数智芯开发者社区:
天数智芯官方文档中心:
完整的 CoreX、ixsmi、vLLM、模型迁移和性能分析方法,应以赛事提供的推理镜像 README、天数智芯官方文档和赛事技术支持说明为准。