8
DCU技术达人
DCU 日常运维 5 个实用脚本|复制即用,排查效率翻倍
2026-07-15 10:37:37
101
# DCU日常运维5个实用脚本|复制即用,排查效率翻倍 日常维护DCU服务器、跑推理训练,不用依赖复杂运维平台,几个短小的脚本就能覆盖健康检查、进程排查、性能测速、环境校验等高频场景。下面整理的都是日常开发高频使用的工具,代码简短无额外依赖,复制到终端就能跑,新手也能直接上手。 ## 1. 一键整机健康巡检脚本 **解决问题**:不用挨个敲命令,一条脚本快速看完所有DCU的算力使用率、显存占用、温度,适合每日开工前快速确认集群状态。 ```bash #!/bin/bash echo "=== DCU 整机健康巡检 $(date '+%Y-%m-%d %H:%M') ===" echo "设备总数: $(rocm-smi --showhw 2>/dev/null | grep -c "Device ID") 张" echo -e "\n编号 | 算力使用率 | 已用显存/总显存 | 核心温度" echo "---- | ---------- | ---------------- | --------" # 提取核心指标并格式化输出 rocm-smi --showuse --showmemuse --showtemp --csv 2>/dev/null | tail -n +2 | \ awk -F',' '{ gsub(/ /, "", $3); gsub(/ /, "", $5); gsub(/ /, "", $6); gsub(/ /, "", $8) printf "%-4s | %-8s%% | %-14s | %-6s℃\n", $1, $3, $5" / "$6, $8 }' ``` 直接保存为 `dcu_check.sh`,加执行权限即可运行,异常卡一眼就能识别。 ## 2. 显存占用进程排查脚本 **解决问题**:显存被占满却找不到是哪个程序导致的,尤其适合程序异常退出、显存没释放的场景,一键定位进程PID。 ```bash #!/bin/bash echo "=== 占用DCU设备的进程列表 ===" count=0 for dev in /dev/dri/renderD*; do echo -e "\n▶ 设备 $dev:" processes=$(fuser $dev 2>/dev/null) if [ -z "$processes" ]; then echo " 无占用进程" else for pid in $processes; do cmd=$(ps -p $pid -o comm= 2>/dev/null) user=$(ps -p $pid -o user= 2>/dev/null) echo " PID: $pid | 用户: $user | 进程: $cmd" count=$((count+1)) done fi done echo -e "\n共找到 $count 个占用进程" ``` 查到异常进程后,用 `kill -9 PID`即可手动释放显存,不用重启服务器。 ## 3. 模型推理快速测速脚本 **解决问题**:换模型、调精度参数后,不用搭完整推理服务,几行代码快速验证单卡生成速度,验证环境是否正常。 ```python import time import torch from transformers import AutoModelForCausalLM, AutoTokenizer # 替换为你的模型路径 model_path = "Qwen/Qwen2-7B-Instruct" tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoModelForCausalLM.from_pretrained( model_path, torch_dtype=torch.float16, device_map="cuda" ).eval() prompt = "请简要介绍大语言模型的应用场景" inputs = tokenizer(prompt, return_tensors="pt").to("cuda") # 预热消除首次编译开销 _ = model.generate(**inputs, max_new_tokens=10) torch.cuda.synchronize() # 正式测速 start = time.perf_counter() outputs = model.generate(**inputs, max_new_tokens=200, do_sample=False) torch.cuda.synchronize() cost = time.perf_counter() - start gen_tokens = outputs.shape[1] - inputs["input_ids"].shape[1] print(f"生成Token数: {gen_tokens}") print(f"总耗时: {cost:.2f}s") print(f"单卡单序列速度: {gen_tokens / cost:.2f} token/s") print(f"峰值显存: {torch.cuda.max_memory_allocated()/1024**3:.2f} GB") ``` DCU环境无需修改设备名,代码里的 `"cuda"`会通过ROCm兼容层自动映射到DCU硬件。 ## 4. 环境依赖一键校验脚本 **解决问题**:新环境部署完成后,一键确认DTK、PyTorch、常用推理库是否齐全,版本是否匹配,避免跑任务到一半才发现缺依赖。 ```bash #!/bin/bash echo "=== DCU 开发环境基线校验 ===" echo -n "rocm-smi 工具: " which rocm-smi &>/dev/null && echo "正常" || echo "未找到(检查DTK环境变量)" echo -n "HIP 编译器: " hipcc --version 2>/dev/null | grep "HIP version" || echo "未找到" echo -e "\n--- Python 核心依赖 ---" python3 << 'EOF' check_list = ["torch", "transformers", "vllm"] for lib in check_list: try: module = __import__(lib) print(f"✅ {lib}: {module.__version__}") except ImportError: print(f"❌ {lib}: 未安装") import torch print(f"\nDCU 设备可用: {torch.cuda.is_available()}") print(f"识别 DCU 数量: {torch.cuda.device_count()}") if torch.cuda.is_available(): print(f"首卡名称: {torch.cuda.get_device_name(0)}") EOF ``` 如果 `torch.cuda.is_available()`返回False,优先检查DTK环境变量和PyTorch版本是否匹配。 ## 5. 显存使用率定时监控脚本 **解决问题**:压测、长训练任务运行时,后台自动记录显存和算力波动,事后可回溯峰值占用,不用一直盯着终端。 ```bash #!/bin/bash # 用法: ./dcu_monitor.sh 日志文件路径 采样间隔(秒) LOG_FILE=${1:-dcu_monitor.log} INTERVAL=${2:-5} echo "开始监控 DCU 状态,日志写入: $LOG_FILE" echo "采样间隔: ${INTERVAL}s,按 Ctrl+C 停止" echo "时间,设备ID,算力使用率(%),已用显存(MB),总显存(MB)" > "$LOG_FILE" while true; do timestamp=$(date '+%H:%M:%S') rocm-smi --showuse --showmemuse --csv 2>/dev/null | tail -n +2 | \ awk -F',' -v t="$timestamp" '{ gsub(/ /, "", $1); gsub(/ /, "", $3); gsub(/ /, "", $5); gsub(/ /, "", $6) print t","$1","$3","$5","$6 }' >> "$LOG_FILE" sleep "$INTERVAL" done ``` 任务结束后打开日志文件,就能直观看到全程的显存和算力变化,方便定位性能瓶颈。 --- 以上5个脚本覆盖了DCU日常运维80%的高频场景,全部基于系统自带命令和原生Python实现,无需安装额外工具。日常存到服务器固定目录,遇到问题直接调用,比每次翻手册、敲零散命令效率高很多。
全部评论(0)
只看楼主
暂无数据
--
楼主
Level.1
0 帖子
楼主热帖
暂无数据