当前位置: 首页 > article >正文

CANN 容器化部署:Docker 与 K8s 实战

一、为什么需要容器化1.1 容器化优势裸机部署: 环境依赖复杂版本冲突 扩缩容困难手动运维 资源隔离差互相影响 容器化部署: 环境一致性开箱即用 弹性扩缩容自动运维 资源隔离互不影响 版本管理灰度发布1.2 CANN 容器架构┌──────────────────────────────────────┐ │ Kubernetes 集群 │ ├──────────────────────────────────────┤ │ ┌─────────────┐ ┌─────────────┐ │ │ │ Pod 0 │ │ Pod 1 │ │ │ │ ┌─────────┐ │ │ ┌─────────┐ │ │ │ │ │推理服务 │ │ │ │推理服务 │ │ │ │ │ └─────────┘ │ │ └─────────┘ │ │ │ │ /dev/davinci0│ │ /dev/davinci1│ │ │ └─────────────┘ └─────────────┘ │ ├──────────────────────────────────────┤ │ 宿主机 (Host OS) │ │ ┌──────────────────────────┐ │ │ │ CANN 驱动 Docker NPU │ │ │ └──────────────────────────┘ │ └──────────────────────────────────────┘二、Docker 环境搭建2.1 基础镜像# Dockerfile.cann-base FROM ubuntu:20.04 # 安装基础依赖 RUN apt-get update apt-get install -y \ build-essential \ cmake \ git \ wget \ rm -rf /var/lib/apt/lists/* # 安装 CANN COPY Ascend-cann-toolkit_8.2.RC1_linux-aarch64.run /tmp/ RUN /tmp/Ascend-cann-toolkit_8.2.RC1_linux-aarch64.run --install --quiet \ rm /tmp/Ascend-cann-toolkit_8.2.RC1_linux-aarch64.run # 设置环境变量 ENV ASCEND_HOME/usr/local/Ascend ENV PATH${ASCEND_HOME}/ascend-toolkit/bin:${ASCEND_HOME}/nnae/bin:${PATH} ENV LD_LIBRARY_PATH${ASCEND_HOME}/ascend-toolkit/lib64:${ASCEND_HOME}/driver/lib64:${LD_LIBRARY_PATH} # 验证安装 RUN npu-smi info WORKDIR /workspace2.2 构建推理镜像# Dockerfile.inference FROM cann-base:latest # 安装 Python RUN apt-get update apt-get install -y python3 python3-pip \ pip3 install --upgrade pip # 安装依赖 COPY requirements.txt /tmp/ RUN pip3 install -r /tmp/requirements.txt # 复制模型和代码 COPY model/ /workspace/model/ COPY src/ /workspace/src/ # 暴露端口 EXPOSE 50051 # 启动命令 CMD [python3, /workspace/src/server.py, --model, /workspace/model/model.om]2.3 构建与运行# 构建基础镜像dockerbuild-fDockerfile.cann-base-tcann-base:latest.# 构建推理镜像dockerbuild-fDockerfile.inference-tinference-server:latest.# 运行容器 (需要 NPU 设备)dockerrun-d\--nameinference\--device/dev/davinci0\--device/dev/davinci_manager\--device/dev/devmm_svm\--device/dev/hisi_hdc\-v/usr/local/Ascend:/usr/local/Ascend\-p50051:50051\inference-server:latest三、NPU 设备透传3.1 设备挂载参数# 必须挂载的设备dockerrun-d\--device/dev/davinci0\# NPU 设备节点--device/dev/davinci_manager\# NPU 管理器--device/dev/devmm_svm\# 设备内存管理--device/dev/hisi_hdc\# HDC 通信-v/usr/local/Ascend:/usr/local/Ascend\# CANN 驱动inference-server:latest# 挂载所有 NPU (多卡)dockerrun-d\--device/dev/davinci0\--device/dev/davinci1\--device/dev/davinci2\--device/dev/davinci3\--device/dev/davinci_manager\--device/dev/devmm_svm\--device/dev/hisi_hdc\-v/usr/local/Ascend:/usr/local/Ascend\inference-server:latest3.2 Docker Compose 配置# docker-compose.ymlversion:3.8services:inference:build:context:.dockerfile:Dockerfile.inferencecontainer_name:inference-serverrestart:unless-stoppedports:-50051:50051devices:-/dev/davinci0:/dev/davinci0-/dev/davinci_manager:/dev/davinci_manager-/dev/devmm_svm:/dev/devmm_svm-/dev/hisi_hdc:/dev/hisi_hdcvolumes:-/usr/local/Ascend:/usr/local/Ascend-./model:/workspace/modelenvironment:-ASCEND_HOME/usr/local/Ascend-PYTHONUNBUFFERED1deploy:resources:limits:memory:16Greservations:memory:8Gnginx:image:nginx:latestports:-80:80volumes:-./nginx.conf:/etc/nginx/nginx.confdepends_on:-inference四、Kubernetes 部署4.1 NPU Device Plugin# npu-device-plugin.ymlapiVersion:apps/v1kind:DaemonSetmetadata:name:ascend-npu-device-pluginnamespace:kube-systemspec:selector:matchLabels:name:ascend-npu-device-plugintemplate:metadata:labels:name:ascend-npu-device-pluginspec:tolerations:-key:CriticalAddonsOnlyoperator:ExistspriorityClassName:system-node-criticalcontainers:-name:npu-device-pluginimage:ascend-k8sdeviceplugin/amd64-npu-plugin:latestimagePullPolicy:IfNotPresentsecurityContext:privileged:truevolumeMounts:-name:device-pluginmountPath:/var/lib/kubelet/device-plugins-name:davincimountPath:/dev/davincivolumes:-name:device-pluginhostPath:path:/var/lib/kubelet/device-plugins-name:davincihostPath:path:/dev/davinci4.2 推理服务 Deployment# inference-deployment.ymlapiVersion:apps/v1kind:Deploymentmetadata:name:inference-servernamespace:defaultspec:replicas:3selector:matchLabels:app:inference-servertemplate:metadata:labels:app:inference-serverspec:containers:-name:inferenceimage:inference-server:latestimagePullPolicy:IfNotPresentports:-containerPort:50051name:grpcresources:limits:huawei.com/npu:1# 请求 1 张 NPUrequests:huawei.com/npu:1volumeMounts:-name:model-volumemountPath:/workspace/modelreadinessProbe:grpc:port:50051initialDelaySeconds:10periodSeconds:5livenessProbe:grpc:port:50051initialDelaySeconds:15periodSeconds:10volumes:-name:model-volumepersistentVolumeClaim:claimName:model-pvc---apiVersion:v1kind:Servicemetadata:name:inference-servicenamespace:defaultspec:selector:app:inference-serverports:-name:grpcport:50051targetPort:50051type:ClusterIP4.3 自动扩缩容# hpa.ymlapiVersion:autoscaling/v2kind:HorizontalPodAutoscalermetadata:name:inference-hpanamespace:defaultspec:scaleTargetRef:apiVersion:apps/v1kind:Deploymentname:inference-serverminReplicas:2maxReplicas:10metrics:-type:Resourceresource:name:cputarget:type:UtilizationaverageUtilization:70-type:Podspods:metric:name:inference_queue_sizetarget:type:AverageValueaverageValue:10behavior:scaleUp:stabilizationWindowSeconds:60policies:-type:Podsvalue:2periodSeconds:60scaleDown:stabilizationWindowSeconds:300policies:-type:Podsvalue:1periodSeconds:120五、资源限制与隔离5.1 NPU 资源配额# resource-quota.ymlapiVersion:v1kind:ResourceQuotametadata:name:npu-quotanamespace:inferencespec:hard:requests.huawei.com/npu:8limits.huawei.com/npu:8requests.cpu:32limits.cpu:64requests.memory:128Gilimits.memory:256Gi5.2 Pod 资源限制# pod-with-limits.ymlapiVersion:v1kind:Podmetadata:name:inference-podspec:containers:-name:inferenceimage:inference-server:latestresources:limits:huawei.com/npu:1cpu:8memory:32Girequests:huawei.com/npu:1cpu:4memory:16Gi六、监控与日志6.1 Prometheus 指标暴露fromprometheus_clientimportCounter,Histogram,Gauge,start_http_server# 定义指标INFERENCE_REQUESTSCounter(inference_requests_total,Total inference requests,[model_name,status])INFERENCE_LATENCYHistogram(inference_latency_seconds,Inference latency,[model_name],buckets[0.01,0.05,0.1,0.5,1.0,2.0,5.0])NPU_MEMORY_USAGEGauge(npu_memory_usage_bytes,NPU memory usage,[device])# 在推理中记录指标defpredict_with_metrics(model_name,input_data):starttime.time()try:outputserver.Inference(input_data)latencytime.time()-start INFERENCE_REQUESTS.labels(model_namemodel_name,statussuccess).inc()INFERENCE_LATENCY.labels(model_namemodel_name).observe(latency)returnoutputexceptExceptionase:INFERENCE_REQUESTS.labels(model_namemodel_name,statuserror).inc()raise# 启动指标服务器start_http_server(8000)6.2 Grafana 看板{dashboard:{title:CANN Inference Dashboard,panels:[{title:QPS,type:graph,targets:[{expr:rate(inference_requests_total[5m]),legendFormat:{{model_name}}}]},{title:P99 Latency,type:graph,targets:[{expr:histogram_quantile(0.99, rate(inference_latency_seconds_bucket[5m])),legendFormat:{{model_name}}}]},{title:NPU Memory,type:graph,targets:[{expr:npu_memory_usage_bytes,legendFormat:{{device}}}]}]}}七、常见问题问题原因解决方案容器内 NPU 不可用设备未挂载添加 --device 参数NPU 驱动版本不匹配镜像与宿主机驱动版本不一致使用相同版本的 CANN推理性能下降容器资源限制太严增加 CPU/内存限制Pod 无法调度NPU 资源不足扩容集群或减少副本数OOM Killed显存/内存超限增加资源限制或优化模型相关仓库ascend-docker- 昇腾 Docker 工具 https://gitee.com/ascend/ascend-dockerk8s-device-plugin- K8s NPU 插件 https://gitee.com/ascend/k8s-device-pluginascend-operator- K8s Ascend Operator https://gitee.com/ascend/ascend-operator

相关文章:

CANN 容器化部署:Docker 与 K8s 实战

一、为什么需要容器化 1.1 容器化优势 裸机部署:环境依赖复杂,版本冲突扩缩容困难,手动运维资源隔离差,互相影响容器化部署:环境一致性,开箱即用弹性扩缩容,自动运维资源隔离,互不影响版本管理,…...

如何通过Play Integrity API完整检测Android设备安全状态

如何通过Play Integrity API完整检测Android设备安全状态 【免费下载链接】play-integrity-checker-app Get info about your Device Integrity through the Play Intergrity API 项目地址: https://gitcode.com/gh_mirrors/pl/play-integrity-checker-app 在移动应用生…...

ComfyUI-Custom-Scripts自动完成终极指南:如何快速提升AI绘画提示词效率

ComfyUI-Custom-Scripts自动完成终极指南:如何快速提升AI绘画提示词效率 【免费下载链接】ComfyUI-Custom-Scripts Enhancements & experiments for ComfyUI, mostly focusing on UI features 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Custom-Sc…...

CANN-昇腾NPU梯度累积-显存不够时怎么模拟大batch训练

大模型训练的最佳 batch size 通常在 1M-4M tokens。8 卡 Atlas 800I A2 的总显存 512GB,batch size 能开到 50 万 tokens 左右——不够。梯度累积让你用小 batch 跑多次前向,累积梯度后一次性更新,等效于大 batch 训练。 梯度累积的原理 标准…...

webMAN-MOD终极指南:PS3自制系统的完整解决方案与实用技巧

webMAN-MOD终极指南:PS3自制系统的完整解决方案与实用技巧 【免费下载链接】webMAN-MOD Extended services for PS3 console (web server, ftp server, netiso, ntfs, ps3mapi, etc.) 项目地址: https://gitcode.com/gh_mirrors/we/webMAN-MOD webMAN-MOD是一…...

2026年热门声音转换成文字工具实测对比,多场景准确率比拼,低调黑马才是真王者

我干ToB销售5年,光客户拜访、季度产品培训的录音,手机里攒了快200G。试过不下10款声音转文字工具,上个月把2026年圈里热门的几款全拉出来测了一遍,对比了多款工具,听脑AI是综合体验最好的,也是我现在天天开…...

终极指南:如何在3DS上原生运行GBA游戏,告别模拟器卡顿

终极指南:如何在3DS上原生运行GBA游戏,告别模拟器卡顿 【免费下载链接】open_agb_firm open_agb_firm is a bare metal app for running GBA homebrew/games using the 3DS builtin GBA hardware. 项目地址: https://gitcode.com/gh_mirrors/op/open_a…...

大麦抢票终极指南:告别手速焦虑,轻松锁定心仪演出门票

大麦抢票终极指南:告别手速焦虑,轻松锁定心仪演出门票 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 面对热门演唱会门票&q…...

别再走弯路!2026亲测好用的AI论文工具|实测避坑硬核版

2026 年学术写作工具已高度分化,千笔AI与ThouPen为全流程首选,豆包、DeepSeek 为专项强手;避坑关键:拒绝假文献、严控 AIGC 率、优先国内适配、免费试用先行。 一、TOP3 全流程首选(亲测不踩雷) 1. 千笔AI&…...

终极MQTT客户端快速入门指南:5分钟掌握跨平台物联网通信

终极MQTT客户端快速入门指南:5分钟掌握跨平台物联网通信 【免费下载链接】mqttclient A high-performance, high-stability, cross-platform MQTT client, developed based on the socket API, can be used on embedded devices (FreeRTOS / LiteOS / RT-Thread / T…...

百度网盘Mac版破解插件:免费解锁SVIP高速下载完整指南

百度网盘Mac版破解插件:免费解锁SVIP高速下载完整指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘Mac版下载速度缓慢而困…...

VideoDownloadHelper:打破视频下载壁垒的智能浏览器插件

VideoDownloadHelper:打破视频下载壁垒的智能浏览器插件 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 在信息爆炸的时代&#x…...

从零到一:打造属于你的智能语音助手完整方案

从零到一:打造属于你的智能语音助手完整方案 【免费下载链接】xiaozhi-esp32-server 本项目为xiaozhi-esp32提供后端服务,帮助您快速搭建ESP32设备控制服务器。Backend service for xiaozhi-esp32, helps you quickly build an ESP32 device control ser…...

T153核心板RISC-V实时核实战:从架构解析到电机控制应用

1. 项目概述:当RISC-V遇上实时性,T153核心板能做什么?最近几年,RISC-V架构在嵌入式领域的热度持续攀升,从最初的学术研究到如今在工业控制、物联网终端等场景的落地,其开放、灵活、可定制的特性吸引了无数开…...

Gopher360:如何用游戏手柄轻松控制您的Windows电脑?免费开源控制器映射工具完整指南

Gopher360:如何用游戏手柄轻松控制您的Windows电脑?免费开源控制器映射工具完整指南 【免费下载链接】Gopher360 Gopher360 is a free zero-config app that instantly turns your Xbox 360, Xbox One, or even DualShock controller into a mouse and k…...

Focus-DETR:基于前景特征选择的高效目标检测模型解析

1. 项目概述与核心痛点目标检测,这个计算机视觉领域的经典任务,如今正站在一个十字路口。一方面,以DETR(Detection Transformer)为代表的端到端检测范式,凭借其简洁优雅的架构和强大的性能,正迅…...

负载开关电路设计:从分立PMOS到集成芯片的选型与应用

1. 负载开关电路:从分立搭建到集成方案的全景解析在电路设计,尤其是电源管理领域,一个常见的需求是控制多个负载的供电通断。想象一下,你的系统里有主控MCU、传感器、通信模块和显示屏,你希望系统休眠时只保留MCU的待机…...

【限时解密】全球仅12家旅游公司跑通的AI Agent冷启动模型:含私有知识库构建SOP

更多请点击: https://codechina.net 第一章:【限时解密】全球仅12家旅游公司跑通的AI Agent冷启动模型:含私有知识库构建SOP 在旅游行业AI落地实践中,“冷启动难”长期制约Agent规模化部署——93%的试点项目因知识断层、意图歧义…...

Python EXE逆向工程架构解析:多格式可执行文件源码提取技术实现

Python EXE逆向工程架构解析:多格式可执行文件源码提取技术实现 【免费下载链接】python-exe-unpacker A helper script for unpacking and decompiling EXEs compiled from python code. 项目地址: https://gitcode.com/gh_mirrors/py/python-exe-unpacker …...

line_buffer + window_buffer架构

一、line buffer + win buffer架构说明 1.在图像算法处理中,line buffer + window buffer架构是非常普通使用的架构; 2.本次针对3*3的滤波,给出两种处理架构的设计方案 二、方案一步骤 ap_uint<8> window_buffer[3][3]; ap_uint<8> line_buffer[2][COLS]; …...

如何快速告别抢票焦虑:大麦抢票自动化工具的完整指南

如何快速告别抢票焦虑&#xff1a;大麦抢票自动化工具的完整指南 【免费下载链接】ticket-purchase 大麦自动抢票&#xff0c;支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 你是否曾经为了抢到心仪演唱会门票…...

量子计算入门:从量子比特到量子退火,解析核心原理与实战路径

1. 项目概述&#xff1a;为什么我们需要理解量子计算&#xff1f;最近几年&#xff0c;量子计算这个词在科技圈的热度居高不下&#xff0c;从大公司的实验室到初创企业的融资新闻&#xff0c;似乎不谈点量子就落伍了。但说实话&#xff0c;很多讨论都停留在“量子霸权”、“算力…...

【独家首发】保险业首个AI Agent成熟度评估模型(5级量化标准+12项KPI基线数据)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;【独家首发】保险业首个AI Agent成熟度评估模型&#xff08;5级量化标准12项KPI基线数据&#xff09; 该模型由国内头部保险科技联合实验室历时18个月实证研发&#xff0c;首次将AI Agent在核保、理赔、…...

微软Windows拆分:云AI战略转型下的业务重构与行业影响

1. 从“巨无霸”到“手术台”&#xff1a;微软拆分的深层逻辑与行业变局最近几年&#xff0c;关于微软可能进行业务拆分的讨论&#xff0c;就像科技行业的“月经帖”&#xff0c;每隔一段时间就会冒出来。但这一次&#xff0c;市场的风声似乎比以往任何时候都要紧。从“拆分Win…...

深入解析CPU L1/L2缓存:原理、性能影响与编程优化实战

1. 项目概述&#xff1a;从“快”字说起做性能调优或者写高性能代码的朋友&#xff0c;对“缓存”这个词一定不陌生。我们总在说&#xff0c;把数据放进缓存里&#xff0c;访问就快了。但缓存本身&#xff0c;尤其是离CPU核心最近的一级缓存&#xff08;L1 Cache&#xff09;和…...

从零到课标对齐:用Claude批量生成校本课程资源,72小时内完成一学期备课,你还在手动写?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;从零到课标对齐&#xff1a;用Claude批量生成校本课程资源&#xff0c;72小时内完成一学期备课&#xff0c;你还在手动写&#xff1f; 教育数字化转型已进入深水区&#xff0c;一线教师却仍陷于“写教案…...

ADAS系统设计全解析:从传感器融合到域控制器实战

1. 项目概述与行业背景最近几年&#xff0c;但凡和汽车沾点边的行业&#xff0c;都绕不开“智能化”这三个字。作为一名在汽车电子和嵌入式系统领域摸爬滚打了十多年的工程师&#xff0c;我亲眼见证了从简单的倒车雷达&#xff0c;到如今能自动跟车、紧急刹车的ADAS系统&#x…...

华为麒麟芯片不外售背后的商业逻辑与技术护城河

1. 从一则新闻说起&#xff1a;麒麟芯片的“不对外”意味着什么前几天&#xff0c;华为轮值董事长徐直军先生在一次公开场合的发言&#xff0c;在科技圈里又激起了一阵讨论。他明确表示&#xff0c;华为“没有任何想法把麒麟芯片对外销售”。这句话乍一听&#xff0c;可能让不少…...

对比直接使用官方API体验Taotoken在稳定接入上的优势

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比直接使用官方API体验Taotoken在稳定接入上的优势 在长期将大模型能力集成到生产系统的实践中&#xff0c;开发者通常会面临一个…...

差点把用户数据泄漏给Claude Code后,我写了个 Rust 工具

两周前&#xff0c;我把公司的数据库接进了Claude Code&#xff0c;效率确实起飞了&#xff0c;直到我翻了一下会话记录。 两周前 公司的 PostgreSQL 数据库接进了Claude Code以后&#xff0c;AI 确实能干——帮我写迁移、联表、生成报表&#xff0c;效率直接起飞。 直到我随…...