AI服务器到货验收清单
合同标的:H3C UniServer R5300 G6 / 4x NVIDIA L20 48GB
服务器型号H3C UniServer R5300 G6
供应商深圳市杰科创想科技有限公司
合同金额¥393,660(含税13%)
验收开始____年____月____日
验收截止____年____月____日(10个工作日内)
合同仅含"上架安装",不含操作系统与软件部署。
软件安装请使用附件脚本 ai_server_setup.sh。
所有验收测试须在 10 个工作日内完成并书面反馈。
一 外观检查与到货清点
1.1 外包装检查
1.2 服务器外观检查
1.3 配件核对
二 硬件配置逐项核对
特别关注:GPU 实物型号标签必须为"NVIDIA L20 48GB",之前合同文本中 GPU 描述不一致(主表"L20" vs 清单"48GB PCIe 4.0")。
三 上架与加电检查
四 BIOS 与固件检查
五 GPU 识别与健康检查
操作:加电进入系统后,运行 nvidia-smi 命令,逐项核对:
六 压力测试
测试工具:gpu-burn / stress-ng / fio / iperf3。以下全部通过方可通过验收。
6.1 GPU 压力测试
6.2 CPU/内存压力测试
6.3 存储性能测试
6.4 网络带宽测试
Ubuntu 24.04 LTS 安装步骤详解
H3C UniServer R5300 G6 / UEFI 模式 / 4×L20 GPU
前置条件:UEFI 启动 U 盘已制作(Rufus,GPT/UEFI 模式)
ISO:ubuntu-24.04.4-live-server-amd64.iso(阿里云:mirrors.aliyun.com/ubuntu-releases/24.04/)
1 上电后 BIOS 设置(开机按 Del)
设置完成后按 F10 保存退出。
2 从 U 盘启动
# 1. 插入 U 盘,重启服务器
# 2. 出现 H3C Logo 时按 F7(Boot Menu)
# 3. 选择 U 盘(通常显示 "UEFI: Mass Storage" 或 U 盘品牌名)
# 4. 选择 "Try or Install Ubuntu Server"
# 5. 进入 Ubuntu 安装界面即成功
3 安装向导逐项设置
Step 1 — 语言
Select a language → English
# 推荐用英文,中文在服务器环境偶尔有编码问题
Step 2 — 键盘布局
Keyboard configuration → English (US)
Step 3 — 网络配置(重要)
安装程序会扫描网卡,看到:
eno1(BMC / 千兆口)
eno2(25G 口 1)
eno3(25G 口 2)
建议:先选一个 25G 口配 DHCP,装完系统再改静态 IP。
不联网也可以:选 "Continue without network"。
Step 4 — 代理配置
Configure proxy → 留空(或填公司代理地址,如果有的话)
Step 5 — 镜像源(国内加速)
Mirror address → 填入以下之一:
http://mirrors.aliyun.com/ubuntu/ # 阿里云(推荐)
http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ # 清华 TUNA
Step 6 — 磁盘分区(关键)
磁盘情况:系统盘 960GB SATA SSD ×2、数据盘 3.84TB NVMe U.2 SSD ×4
建议在 BIOS 或 H3C 存储管理界面先做 RAID(系统盘 RAID1、数据盘 RAID0 或 RAID5)。
Storage configuration → Use an entire disk
→ 选择系统盘(通常 /dev/sda)
→ 分区方案建议:
/boot/efi → 1GB (EFI System Partition)
/ → 100GB (ext4)
/var → 150GB (ext4,日志和容器镜像)
/data → 剩余约 650GB (ext4,放安装脚本/临时文件)
swap → 不设置(512GB 内存不需要 swap)
# 数据盘(4×3.84TB NVMe)装完系统后再挂载:
# 建议 RAID0 做 /data/models(12-15TB 模型权重存储)
# 或 RAID5 做 /data(约 11.5TB 可用,含冗余)
Step 7 — 用户设置
Your name: [服务器管理员姓名]
Your server's name: ai-server-01(或你们习惯的命名)
Username: ubuntu(或标准运维账号)
Password: [设置强密码]
Confirm password: [确认]
Step 8 — SSH 配置(重要)
☑ Install OpenSSH server ← 必须勾选
□ Allow password authentication ← 按需,建议先勾,装完改密钥登录
Step 9 — 可选软件(Snaps)
全部不勾选
# Docker 我们后面用脚本装,这里勾了版本可能旧
Step 10 — 开始安装 & 重启
确认无误后 → Done → Continue
# 安装过程约 10-15 分钟
安装完成后 → Reboot Now
# 移除 U 盘,服务器重启进入新系统
4 首次进入系统后必做
# 1. 登录(从跳板机 SSH)
ssh ubuntu@<服务器IP>
# 2. 切换 root(方便跑脚本)
sudo -i
# 3. 确认网络
ip a
# 确认 25G 口和业务 IP 正常
# 4. 确认磁盘
lsblk
df -h
# 5. 更新系统
apt update && apt upgrade -y
# 6. 跑安装脚本
bash /path/to/ai_server_setup.sh
5 安装常见问题
| 问题 | 原因 | 解决方法 |
| 找不到 25G 网卡 | 驱动未随 ISO 带 | 先装系统,脚本里会装 linux-modules-extra |
| 卡在 Reading package lists | 镜像源连不上 | 选 "Continue without network",跳过 |
| 重启后进不了系统 | 启动顺序问题 | 进 BIOS,把 Ubuntu 启动项提到第一位 |
| GPU 在 lspci 里看不到 | Above 4G Decoding 未开 | 进 BIOS 开启,重启 |
安装后验证与验收签收
七 系统安装后验证
合同不含系统安装服务。以下为 ai_server_setup.sh 执行完成后的验证项:
八 AI 推理功能测试
使用 vLLM 或 SGLang 加载 Qwen3.6-27B 模型,验证推理功能正常。
8.1 启动 vLLM 推理服务(纯文本模式)
# 方式一:使用生成的启动脚本(推荐)
sudo start_vllm_text.sh
# 方式二:直接命令行
export VLLM_USE_MODELSCOPE=True # 国内从 ModelScope 下载
python3.12 -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen3.6-27B \
--tensor-parallel-size 4 \
--language-model-only \
--dtype bfloat16 \
--max-model-len 32768 \
--reasoning-parser qwen3 \
--port 8000
8.2 测试 API 调用
# 查看已加载模型
curl http://localhost:8000/v1/models
# 单次推理测试
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen3.6-27B",
"messages": [{"role": "user", "content": "1+1=?"}],
"max_tokens": 100
}'
8.3 并发压测(50 请求)
# 安装压测工具
pip install openai
# 运行压测(示例脚本)
python3 << 'EOF'
from openai import OpenAI
import concurrent.futures
client = OpenAI(base_url="http://localhost:8000/v1", api_key="dummy")
def query():
resp = client.chat.completions.create(
model="Qwen/Qwen3.6-27B",
messages=[{"role":"user","content":"用一句话介绍深圳"}],
max_tokens=50
)
return resp.usage.total_tokens
with concurrent.futures.ThreadPoolExecutor(max_workers=50) as ex:
results = list(ex.map(lambda _: query(), range(50)))
print(f"50 并发完成,平均 token:{sum(results)/len(results):.0f}")
EOF
九 验收签收
甲方(信息部)验收人
签字:__________ 日期:__________
乙方(供应商)交货人
签字:__________ 日期:__________
异议记录:
如有任何配置不符或测试不通过项,请在此详细记录,并在验收截止日期前书面提交乙方。
软件安装脚本参考
以下脚本已另存为 ai_server_setup.sh,可直接在服务器上执行。
脚本已更新支持 Qwen3.6-27B(vLLM ≥0.19.0 + SGLang)。
使用方法:
1. 将脚本拷贝到服务器:scp ai_server_setup.sh user@server-ip:/tmp/
2. 加执行权限:chmod +x /tmp/ai_server_setup.sh
3. 以 root 运行:sudo bash /tmp/ai_server_setup.sh
4. 完成后重启:sudo reboot
ai_server_setup.sh(完整版)
#!/bin/bash
# AI服务器软件环境一键安装脚本
# 适用:H3C UniServer R5300 G6 / 4x NVIDIA L20 48GB / Ubuntu 24.04 LTS
# 模型:Qwen3.6-27B(Dense,原生262K上下文,支持多模态)
# 用法:chmod +x ai_server_setup.sh && sudo bash ai_server_setup.sh
# ========================================
set -euo pipefail
LOG_FILE="/var/log/ai_server_setup_$(date +%Y%m%d_%H%M%S).log"
exec > >(tee -a "$LOG_FILE") 2>&1
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m'
log_section() { echo -e "\n${GREEN}===== $1 =====${NC}"; }
log_step() { echo -e "${YELLOW}>>> $1${NC}"; }
log_ok() { echo -e "${GREEN}[OK] $1${NC}"; }
log_info() { echo -e "${CYAN}[INFO] $1${NC}"; }
log_err() { echo -e "${RED}[ERROR] $1${NC}"; exit 1; }
log_warn() { echo -e "${YELLOW}[WARN] $1${NC}"; }
# ---- 环境检查 ----
log_section "环境检查"
[ "$EUID" -eq 0 ] || log_err "请使用 sudo 运行此脚本"
if grep -q "24.04" /etc/os-release; then
log_ok "操作系统:Ubuntu 24.04 LTS"
else
log_err "不支持的操作系统版本,请使用 Ubuntu 24.04 LTS"
fi
GPU_COUNT=$(lspci 2>/dev/null | grep -i nvidia | grep -ic "3d\|vga\|display" || echo 0)
if [ "$GPU_COUNT" -eq 4 ]; then
log_ok "检测到 $GPU_COUNT 张 NVIDIA GPU"
elif [ "$GPU_COUNT" -gt 0 ]; then
log_warn "仅检测到 $GPU_COUNT 张 GPU,预期 4 张(L20 x4)"
else
log_warn "lspci 未检测到 NVIDIA GPU,驱动安装后重试"
fi
MEM_GB=$(free -g | awk '/^Mem:/{print $2}')
if [ "$MEM_GB" -ge 500 ]; then
log_ok "内存:${MEM_GB}GB(预期 512GB)"
else
log_warn "内存:${MEM_GB}GB(预期 512GB)"
fi
DISK_GB=$(df -BG / 2>/dev/null | tail -1 | awk '{print $4}' | tr -d 'G')
if [ -n "$DISK_GB" ] && [ "$DISK_GB" -ge 100 ]; then
log_ok "根分区可用空间:${DISK_GB}GB"
else
log_warn "根分区可用空间不足 100GB,模型下载可能失败"
fi
# ---- 系统更新 ----
log_section "系统更新与基础依赖"
log_step "更新 apt 源..."
apt-get update -y
log_step "升级系统包..."
apt-get upgrade -y
log_step "安装基础依赖..."
apt-get install -y build-essential dkms linux-headers-$(uname -r) \
wget curl git vim htop nvtop btop net-tools iperf3 \
stress-ng fio pciutils tmux screen \
software-properties-common gpg ca-certificates
log_ok "基础依赖安装完成"
# ---- NVIDIA 驱动 ----
log_section "安装 NVIDIA 驱动"
if command -v nvidia-smi >/dev/null; then
EXISTING_DRIVER=$(nvidia-smi --query-gpu=driver_version --format=csv,noheader 2>/dev/null | head -1 | tr -d ' ' || echo "未知")
log_ok "已安装 NVIDIA 驱动版本:$EXISTING_DRIVER"
else
log_step "安装 NVIDIA 驱动 550+ ..."
# 禁用 nouveau
if ! grep -q "blacklist nouveau" /etc/modprobe.d/blacklist-nvidia-nouveau.conf 2>/dev/null; then
cat > /etc/modprobe.d/blacklist-nvidia-nouveau.conf << 'EOF'
blacklist nouveau
options nouveau modeset=0
EOF
update-initramfs -u
fi
wget -q https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
dpkg -i cuda-keyring_1.1-1_all.deb
rm -f cuda-keyring_1.1-1_all.deb
apt-get update -y
apt-get install -y nvidia-driver-550 || apt-get install -y nvidia-driver-555 || log_err "驱动安装失败"
log_ok "NVIDIA 驱动安装完成,请稍后重启服务器"
fi
# ---- CUDA Toolkit ----
log_section "安装 CUDA Toolkit"
if dpkg -l 2>/dev/null | grep -q "cuda-toolkit-12"; then
log_ok "CUDA Toolkit 已安装"
else
log_step "安装 CUDA 12.4..."
apt-get install -y cuda-toolkit-12-4
cat > /etc/profile.d/cuda.sh << 'EOF'
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda
EOF
chmod +x /etc/profile.d/cuda.sh
log_ok "CUDA 12.4 安装完成"
fi
# ---- Docker ----
log_section "安装 Docker"
if command -v docker >/dev/null; then
log_ok "Docker 已安装:$(docker --version)"
else
log_step "安装 Docker CE..."
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do
apt-get remove -y $pkg 2>/dev/null || true
done
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" > /etc/apt/sources.list.d/docker.list
apt-get update -y
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
log_ok "Docker 安装完成"
fi
# ---- NVIDIA Container Toolkit ----
log_section "安装 NVIDIA Container Toolkit"
if docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu24.04 nvidia-smi >/dev/null 2>&1; then
log_ok "NVIDIA Container Toolkit 已正常工作"
else
log_step "安装 nvidia-container-toolkit..."
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' > /etc/apt/sources.list.d/nvidia-container-toolkit.list
apt-get update -y
apt-get install -y nvidia-container-toolkit
nvidia-ctk runtime configure --runtime=docker
systemctl restart docker
log_ok "NVIDIA Container Toolkit 安装完成"
fi
# ---- Python 环境 ----
log_section "配置 Python 环境"
log_step "安装 Python3.12 + pip..."
apt-get install -y python3.12 python3.12-venv python3-pip
python3.12 -m pip install --upgrade pip setuptools wheel
log_ok "Python 环境配置完成"
# ---- vLLM(≥0.19.0) ----
log_section "安装 vLLM(Qwen3.6 要求 ≥0.19.0)"
INSTALL_VLLM=true
if python3.12 -m pip show vllm >/dev/null 2>&1; then
VLLM_VER=$(python3.12 -m pip show vllm 2>/dev/null | grep Version | awk '{print $2}')
log_info "已安装 vLLM 版本:$VLLM_VER"
if python3.12 -c "from packaging import version; import sys; sys.exit(0 if version.parse('$VLLM_VER') >= version.parse('0.19.0') else 1)" 2>/dev/null; then
log_ok "vLLM 版本满足 Qwen3.6 要求(≥0.19.0)"
INSTALL_VLLM=false
else
log_warn "vLLM 版本过低,将升级至最新版"
fi
fi
if [ "$INSTALL_VLLM" = true ]; then
log_step "安装 vLLM ≥0.19.0(约 10-20 分钟)..."
python3.12 -m pip install "vllm>=0.19.0"
log_ok "vLLM 安装完成"
fi
# ---- SGLang(可选) ----
log_section "安装 SGLang(生产环境推荐)"
if python3.12 -m pip show sglang >/dev/null 2>&1; then
log_ok "SGLang 已安装"
else
log_step "安装 SGLang ≥0.5.10..."
python3.12 -m pip install "sglang[all]>=0.5.10"
log_ok "SGLang 安装完成"
fi
# ---- 生成启动脚本 ----
log_section "生成模型启动脚本"
cat > /usr/local/bin/start_vllm_text.sh << 'SCRIPT'
#!/bin/bash
# Qwen3.6-27B vLLM 启动脚本(纯文本模式,推荐)
MODEL="${VLLM_MODEL:-Qwen/Qwen3.6-27B}"
PORT="${VLLM_PORT:-8000}"
TP_SIZE="${VLLM_TP_SIZE:-4}"
[ "${VLLM_USE_MODELSCOPE:-0}" = "1" ] && export VLLM_USE_MODELSCOPE=True
echo "启动 vLLM API 服务(纯文本模式)模型:$MODEL 端口:$PORT"
python3.12 -m vllm.entrypoints.openai.api_server \
--model "$MODEL" --tensor-parallel-size "$TP_SIZE" \
--language-model-only --dtype bfloat16 \
--max-model-len 32768 --reasoning-parser qwen3 \
--gpu-memory-util 0.85 --port "$PORT" "$@"
SCRIPT
cat > /usr/local/bin/start_vllm_mm.sh << 'SCRIPT'
#!/bin/bash
# Qwen3.6-27B vLLM 启动脚本(多模态模式)
MODEL="${VLLM_MODEL:-Qwen/Qwen3.6-27B}"
PORT="${VLLM_PORT:-8000}"
TP_SIZE="${VLLM_TP_SIZE:-4}"
[ "${VLLM_USE_MODELSCOPE:-0}" = "1" ] && export VLLM_USE_MODELSCOPE=True
echo "启动 vLLM API 服务(多模态模式)模型:$MODEL 端口:$PORT"
python3.12 -m vllm.entrypoints.openai.api_server \
--model "$MODEL" --tensor-parallel-size "$TP_SIZE" \
--dtype bfloat16 --max-model-len 16384 \
--reasoning-parser qwen3 --gpu-memory-util 0.85 \
--port "$PORT" --mm-encoder-tp-size 4 "$@"
SCRIPT
cat > /usr/local/bin/start_sglang.sh << 'SCRIPT'
#!/bin/bash
# Qwen3.6-27B SGLang 启动脚本(生产推荐)
MODEL="${SGLANG_MODEL:-Qwen/Qwen3.6-27B}"
PORT="${SGLANG_PORT:-8000}"
TP_SIZE="${SGLANG_TP_SIZE:-4}"
[ "${VLLM_USE_MODELSCOPE:-0}" = "1" ] && export VLLM_USE_MODELSCOPE=True
echo "启动 SGLang API 服务 模型:$MODEL 端口:$PORT"
python3.12 -m sglang.launch_server \
--model-path "$MODEL" --tp "$TP_SIZE" \
--dtype bfloat16 --context-length 262144 \
--host 0.0.0.0 --port "$PORT" \
--mem-fraction-static 0.85 "$@"
SCRIPT
chmod +x /usr/local/bin/start_vllm_text.sh
chmod +x /usr/local/bin/start_vllm_mm.sh
chmod +x /usr/local/bin/start_sglang.sh
log_ok "启动脚本已生成:start_vllm_text.sh / start_vllm_mm.sh / start_sglang.sh"
# ---- 系统优化 ----
log_section "系统优化"
if command -v nvidia-smi >/dev/null; then
nvidia-smi -pm 1
log_ok "GPU 持久化模式已启用"
fi
sysctl vm.swappiness=10
grep -q "vm.swappiness=10" /etc/sysctl.conf 2>/dev/null || echo "vm.swappiness=10" >> /etc/sysctl.conf
log_ok "swappiness = 10"
if [ -f /sys/kernel/mm/transparent_hugepage/enabled ]; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
cat > /etc/systemd/system/disable-thp.service << 'EOF'
[Unit]
Description=Disable Transparent Huge Pages
After=sysinit.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=multi-user.target
EOF
systemctl enable disable-thp.service
log_ok "透明大页已禁用(已持久化)"
fi
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf
log_ok "文件描述符限制已调整"
# ---- 验证 ----
log_section "安装验证"
echo ""
echo "=== GPU 状态 ==="
nvidia-smi --query-gpu=index,name,driver_version,memory.total,temperature.gpu --format=csv 2>/dev/null || echo "(需要重启后生效)"
echo ""
echo "=== vLLM 版本 ==="
python3.12 -m pip show vllm 2>/dev/null | grep -E "Name|Version" || echo "vLLM 未安装"
echo ""
echo "=== SGLang 版本 ==="
python3.12 -m pip show sglang 2>/dev/null | grep -E "Name|Version" || echo "SGLang 未安装"
# ---- 完成 ----
echo ""
echo "=========================================="
echo -e "${GREEN} AI 服务器软件环境安装完成!${NC}"
echo " 日志文件:$LOG_FILE"
echo "=========================================="
echo ""
echo "后续步骤:"
echo " 1. 重启服务器:sudo reboot"
echo " 2. 验证 GPU:nvidia-smi"
echo " 3. 启动推理服务(三选一):"
echo " a) vLLM 纯文本(推荐):sudo start_vllm_text.sh"
echo " b) vLLM 多模态(支持看图):sudo start_vllm_mm.sh"
echo " c) SGLang(生产推荐):sudo start_sglang.sh"
echo " 4. 国内用户技巧:export VLLM_USE_MODELSCOPE=True"
echo ""
到货当日操作流程速查
| # | 步骤 | 预计耗时 | 负责人 |
| 1 | 到货签收 + 外观检查 | 30 分钟 | ________ |
| 2 | 拆箱 + 配件清点 | 20 分钟 | ________ |
| 3 | BIOS 设置(Above 4G 等) | 15 分钟 | ________ |
| 4 | Ubuntu 24.04 安装(含分区) | 30 分钟 | ________ |
| 5 | 上架安装 + 网络/电源接线 | 40 分钟 | ________ |
| 6 | 加电 + 执行 ai_server_setup.sh | 30 分钟 | ________ |
| 7 | 重启 + GPU 识别验证 | 10 分钟 | ________ |
| 8 | GPU 压力测试(gpu-burn 30min) | 1 小时 | ________ |
| 9 | CPU/内存/存储/网络综合压测 | 3 小时 | ________ |
| 10 | AI 推理功能测试(Qwen3.6-27B) | 30 分钟 | ________ |
| 11 | 填写验收清单 + 签署 | 20 分钟 | ________ |