xpu-server — 部署指南【免费下载链接】ops-test-kitTTKOps Test Tool Kit是CANN算子库提供的全链路、自动化、批量化算子测试框架帮助开发者快速完成算子批量功能验证、性能评估以及Golden值比对提升算子开发质量和效率。项目地址: https://gitcode.com/cann/ops-test-kitTTK 远端 XPU 执行服务器。接收 TTK worker 端的算子执行请求在多种硬件加速器上跑 PyTorch/TensorFlow 算子回传结果。本文档出现的硬件厂商名、设备路径、镜像名仅作示例TTK 通过配置驱动支持任意符合接口的硬件加速器。快速开始# 1. 拷贝 server 包到 XPU 机器只需要这个目录 scp -r ttk/remote/server/ userxpu-box:/opt/xpu_server/ # 2. 在 XPU 机器上启动 # xpu-server 是 ttk-free 独立包按 xpu_server 跑包的**父目录**需在 PYTHONPATH 上或作为 cwd # 部署在 /opt/xpu_server/ → cd 到 /opt或 PYTHONPATH/opt ssh userxpu-box cd /opt python -m xpu_server.xpu_server --port 9090TTK worker 端通过ttk.conf.yaml或--config配置remote.endpoints连过来。到此就通了。两个概念provider用什么框架/库执行算子。用户通过--providertorch指定server 通过/v1/heartbeat声明自己能提供哪些。常见值torch、tf、flash_attn、vllmhardware底层硬件类型决定设备字符串格式如 torch 的mlu:0、tf 的/device:MLU:0。启动时 /dev 自动探测也可手动覆盖两个正交维度部署场景 传输×执行隔离两两组合per-Process 执行per-Container 执行HTTP 明文场景 1本机/ 场景 2内部场景 2b可选的容器隔离mTLS 加密场景 3内部跨机场景 4CI 对外传输HTTP 用于同信任域mTLS 用于跨机/不可信网络执行隔离per-Processfork 子进程用于可信代码per-ContainerDocker用于不可信代码部署配置所有配置在一个 YAML 文件里默认ttk/remote/server/xpu_server.yamlserver: bind: 127.0.0.1 # 监听地址 port: 9090 max_concurrent: 16 # 并发上限 run_deadline_s: 300 # 单请求超时(秒) execution: sandbox: none # noneper-Process| dockerper-Container # providers 可选不配则框架探测到什么就暴露什么 providers: - torch # - tf # 注释掉 不暴露即使 tf 已安装 # - flash_attn # 只暴露 flash_attn不暴露 raw torch # # 注:providers 列表只表达「能力集合」,顺序不代表优先级。客户端优先级由 specs 顺序决定(应用层), # 不依赖 detect 返回顺序。endpoint providers 默认由 /v1/heartbeat 动态发现,也可在 yaml 显式配置(override)。 # hardware 可选不配则启动时 /dev 自动探测实体段配置见 xpu_server.yaml优先级命令行参数 YAML 内置默认场景 1本机测试 — HTTP per-ProcessTTK 和 xpu-server 在同一台机器零配置最快。python -m xpu_server.xpu_server --port 9090 # TTK worker 端 ttk kernel -i case.csv --config ttk.conf.yaml绑定127.0.0.1无网络暴露每请求一个子进程multiprocessing.Process跑完即毁无 TLS、无 Docker场景 2内部测试 — HTTP 灵活部署同信任域内代码可信。Server 可按需选择部署位置和执行方式2aServer 在 provider 容器中per-Process利用用户已有的官方框架镜像xpu-server 部署在容器内端口映射对外# 加速器机器用户已有官方镜像 # 用 -dit不是 -d厂商镜像默认 CMDbash纯 -d 无 tty 会立即 EOF 退出 → 容器 Exited docker run -dit --device /dev/cambricon0 --name tf-server -p 9090:9090 \ cambricon/tensorflow:latest # 拷贝 xpu-server 包到容器目录名用合法 Python 包名 xpu_server——带连字符的 xpu-server 无法被 python -m scp -r ttk/remote/server/ userxpu-box:/tmp/xpu_server/ docker cp /tmp/xpu_server/ tf-server:/opt/ # 容器内 /opt/xpu_server/ttk-free 独立包 # 容器内安装依赖 docker exec tf-server pip install numpy pyyaml # 写 server 配置只暴露 tf拷进容器 # 不能 docker exec ... --config (echo ...)进程替换的 /dev/fd/N 在宿主机容器读不到 echo providers: [tf] /tmp/xpu_server.yaml docker cp /tmp/xpu_server.yaml tf-server:/opt/xpu_server.yaml # 容器内启动xpu-server 是 ttk-free无 ttk.* 依赖按独立包名跑不是 ttk.remote.server.xpu_server docker exec -d -e PYTHONPATH/opt tf-server \ python -m xpu_server.xpu_server --port 9090 --bind 0.0.0.0 --config /opt/xpu_server.yaml同理torch 容器用cambricon/pytorch:latest镜像配providers: [torch]。镜像天然隔开了框架环境——tf 镜像里没有 torch反之亦然。2bServer 在 Host 上per-Process 或 per-ContainerServer 直接跑在 Host有完整的 framework 探测能力# per-Process默认最快 python -m xpu_server.xpu_server --port 9090 # 或 per-Container需要 Docker~300ms 额外开销 python -m xpu_server.xpu_server --port 9090 \ --config (sed s/sandbox: none/sandbox: docker/ xpu_server.yaml)注意per-Container 模式下 server 必须在 Host 上运行不能在容器内再起子容器Docker-in-Docker 需要--privileged安全上不推荐。场景 3内部跨机 — mTLS per-ProcessTTK 和 XPU 在不同机器团队内部代码可信传输加密但执行从简。# 1. 生成证书 bash scripts/gen_tls_certs.sh /opt/ttk-certs # 2. 分发 scp /opt/ttk-certs/ca.crt /opt/ttk-certs/server.* userxpu-box:/opt/ttk-certs/ # client.{crt,key} 留在 TTK worker 机器 # 3. XPU 机器配置 启动 cat /opt/xpu_server/xpu_server.yaml EOF server: bind: 0.0.0.0 port: 9090 execution: sandbox: none # per-Process代码可信 tls: enabled: true ca_cert: /opt/ttk-certs/ca.crt server_cert: /opt/ttk-certs/server.crt server_key: /opt/ttk-certs/server.key EOF python -m xpu_server.xpu_server --port 9090 --config /opt/xpu_server/xpu_server.yaml # 4. TTK worker 端default.yaml 配 TLS 证书路径场景 4CI 对外 — mTLS per-Container不可信的用户代码。Server 部署在 Host 上每个请求一个隔离容器。# 1. 构建 executor 镜像 docker build -f Dockerfile.torch -t xpu-executor-torch:latest . docker build -f Dockerfile.tf -t xpu-executor-tf:latest . # 2. 配置 cat /opt/xpu_server/xpu_server.yaml EOF server: bind: 0.0.0.0 port: 9090 execution: sandbox: docker # per-Container不可信代码隔离 tls: enabled: true ca_cert: /opt/ttk-certs/ca.crt server_cert: /opt/ttk-certs/server.crt server_key: /opt/ttk-certs/server.key docker: images: torch: xpu-executor-torch:latest tf: xpu-executor-tf:latest memory: 8g network: none # 用户代码无网络 EOF # 3. 启动必须在 Host 上不能在容器内 python -m xpu_server.xpu_server --port 9090 --config /opt/xpu_server/xpu_server.yaml容器防护矩阵恶意行为容器阻断方式删文件--read-only根文件系统连外网--network none提权--cap-drop ALL持久化--rm跑完即毁资源耗尽--memory deadline timeout部署模式对照per-Processper-Container配置sandbox: nonesandbox: dockerServer 部署位置Host 或容器内均可必须 Host不能 DinD隔离级别进程级sys.modules隔离完整 OS 级启动开销~10msfork~300-600ms容器需要 Docker否是适用可信代码、内部团队不可信代码、CI传输加密可选 mTLSmTLS 必须硬件自动探测启动时不配hardware且不传--devices则 /dev 自动探测/dev 设备文件 → /dev/cambricon0 → mlu, /dev/davinci0 → npu, ...毫秒级,不依赖框架 Fallback: cpu/dev检测提取实际 device idregex^prefix(\d)$不假设从 0 连续。例如/dev/cambricon2,cambricon5→device_ids[2,5]。控制设备无数字尾自动排除。手动指定覆盖探测直接给 device id 列表python -m xpu_server.xpu_server --devices 0,1命令行参考python -m xpu_server.xpu_server \ --port 9090 # 监听端口默认配置或 9090 --bind 127.0.0.1 # 绑定地址默认127.0.0.1 --config ./xpu_server.yaml # 配置文件路径 --devices 0,1 # 设备 ID 列表不传则 /dev 自动探测 --dry-run # 空跑模式返回随机数据健康检查 / 服务发现# /v1/heartbeat 合并了探活 服务发现 tenant 注册旧 /health、/v1/detect、/heartbeat 已并入此端点 curl http://127.0.0.1:9090/v1/heartbeat # → {status:ok,hardware:gpu,device_count:2,providers:[torch,tf]} # device_count 实际检测到的 device 数多卡时 1多卡并发多卡 server 自动启用 per-device 并发执行不同 device 上的请求并发跑吞吐 × 卡数同一 device 上的请求串行保护 PERF 测量精度reset_peak_memory_stats Event timing 不被其他请求干扰分配策略RR 起点 try-lock 遍历找空闲 device fallback 阻塞起点全占时等max_concurrentyaml 配置建议 ≥ device 数以用满并发小于则 data_gate 限制总并发部分 device 空闲启动 warning 提示不阻止启动注意单卡 server 下所有请求含 DATA 模式都串行——这是为了保证 PERF 测量精度。多卡场景下 DATA 仍跨卡并发。X-API 响应头/v1/run成功和错误的响应都带X-APIheader回传 server 实际执行的 API 标识X-API: torch.add # 推导模式client 没配 apiserver 从 op_name 推导 X-API: torch.add # ACLNN 算子aclnnAdd → strip → add → torch.add回传实际执行的 API X-API: AddSpec # spec 模式回传 spec_class 名客户端读此 header 显示真实 API不再显示 custom。旧 server 不发此 header客户端 fallback 到spec.api或 custom。文件结构ttk/remote/server/ ← 独立部署包无 ttk.* 依赖stdlib numpy 框架 ├── README.md 本文件 ├── xpu_server.py 主进程HTTP 子进程/容器派发 ├── xpu_server.yaml 服务端配置 ├── executor.py 子进程入口算子执行 ├── execution_container.py 参数绑定 device 格式化 ├── executor_main.py Docker 容器入口 ├── container.py Docker 后端 ├── config.py 配置加载器 ├── Dockerfile.torch Torch executor 镜像示例 └── Dockerfile.tf TF executor 镜像示例【免费下载链接】ops-test-kitTTKOps Test Tool Kit是CANN算子库提供的全链路、自动化、批量化算子测试框架帮助开发者快速完成算子批量功能验证、性能评估以及Golden值比对提升算子开发质量和效率。项目地址: https://gitcode.com/cann/ops-test-kit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考