从零在 Linux 服务器部署 Qwen3-ASR + vLLM:一份可复用的甲方现场实战笔记

本文记录了一次从“服务器上几乎没有个人开发环境”开始,完成 Linux 用户隔离、Miniconda 安装、磁盘迁移、Qwen3-ASR 与 vLLM 安装、模型启动、GPU 选择以及 Windows SSH 隧道访问的完整过程。

目标是把今天踩过的坑整理成一套以后可以在甲方服务器复用的部署方法。

本文中的用户名、目录、端口均为示例。进入甲方环境后,应根据对方的账号制度、磁盘规划、网络策略、GPU 调度方式和安全要求进行调整。


一、最终部署架构

本次部署完成后的链路如下:

Windows 浏览器麦克风
        ↓
Windows 本地端口,例如 18095
        ↓
SSH 本地端口转发
        ↓
Linux 服务器 127.0.0.1:10095
        ↓
Qwen3-ASR Streaming Demo
        ↓
vLLM 推理引擎
        ↓
指定的 NVIDIA GPU

服务器侧目录规划为:

/app/hd/data01/username/
├── conda_envs/        # Conda 虚拟环境
├── conda_pkgs/        # Conda 软件包缓存
├── pip_cache/         # pip 下载缓存
├── tmp/               # pip、编译、解压临时目录
├── models/            # 模型权重
├── huggingface/       # Hugging Face 缓存
├── modelscope/        # ModelScope 缓存
├── torch/             # PyTorch 缓存
├── projects/          # 项目代码
└── logs/              # 运行日志

本次实际占用大致为:

Conda 环境及推理框架:约 11 GB
Qwen3-ASR 模型权重:约 1.8 GB
其他缓存和临时文件:数百 MB
总计:约 13 GB

这属于正常现象。模型本身不算特别大,但 PyTorch、vLLM、Triton、CUDA 运行库、cuDNN、cuBLAS、NCCL 等依赖会占据大量空间。


二、部署前先做环境盘点

甲方服务器上不要一上来就安装软件。第一步应先确认以下信息:

whoami
hostname
cat /etc/os-release
uname -m
free -h
df -h
nvidia-smi
which srun
which sbatch

重点确认:

  1. 当前登录账号是谁;
  2. 是否有 sudo 权限;
  3. 操作系统是 Ubuntu、Debian、Rocky Linux 还是其他发行版;
  4. CPU 架构是否为 x86_64
  5. 根分区和数据盘剩余空间;
  6. GPU 型号、数量和当前占用;
  7. 是否属于 Slurm 等集群调度环境;
  8. 服务器是否可以访问外网;
  9. 是否需要经过跳板机;
  10. 甲方是否允许自行创建用户、安装依赖和运行长期服务。

2.1 确认 sudo 权限

sudo -l

如果当前账号没有 sudo 权限,不要尝试绕过权限,应联系甲方管理员执行系统级操作。

2.2 检查磁盘

df -h

df -h "$HOME"
df -h /tmp

本次实战中,发现根分区已经满载:

/dev/nvme0n1p2  1.8T  1.7T  439M  100%  /

同时存在一块空间充足的数据盘:

/dev/sda1  15T  3.1T  11T  22%  /app/hd/data01

因此不能继续把 Conda 环境、模型和缓存写入 /home,必须迁移到数据盘。

2.3 检查 inode 和用户配额

空间不足不一定只是容量问题,也可能是 inode 或个人配额耗尽:

df -i "$HOME"
df -i /tmp
quota -s 2>/dev/null || true

三、创建独立 Linux 用户

在允许创建本地用户的普通服务器上,可以使用独立账号隔离文件和开发环境。

Ubuntu / Debian:

sudo adduser username

RHEL / Rocky / AlmaLinux:

sudo useradd --create-home --shell /bin/bash username
sudo passwd username

检查:

id username
ls -ld /home/username

切换到新账号:

sudo su - username

确认:

whoami
pwd
echo "$HOME"

应看到:

username
/home/username
/home/username

3.1 是否要授予 sudo

Ubuntu / Debian:

sudo usermod -aG sudo username

RHEL 系列:

sudo usermod -aG wheel username

重新登录后验证:

sudo whoami

应输出:

root

在甲方现场,原则上遵守最小权限。模型运行账号通常不需要永久完整 sudo 权限。最好由管理员完成系统依赖安装,而模型进程使用普通账号运行。


四、安装 Miniconda

Miniconda 安装包本身已经包含 Python,因此即使服务器没有 python 命令,也可以安装。

4.1 检查架构

uname -m

常见结果:

x86_64

4.2 下载或离线上传

服务器可联网时:

cd "$HOME"
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

服务器不能联网时,在本地电脑下载 Linux 安装脚本,然后上传:

scp "$HOME\Downloads\Miniconda3-latest-Linux-x86_64.sh" `
  username@服务器地址:/home/username/

使用非默认 SSH 端口时:

scp -P 2222 `
  "$HOME\Downloads\Miniconda3-latest-Linux-x86_64.sh" `
  username@服务器地址:/home/username/

4.3 安装

bash Miniconda3-latest-Linux-x86_64.sh

安装目录建议保留为当前用户目录,例如:

/home/username/miniconda3

最后询问是否初始化 Conda 时选择:

yes

安装器通常会提示:

For changes to take effect, close and re-open your current shell.

不必真的断开 SSH,可以直接执行:

source ~/.bashrc

如果 conda 仍找不到:

source ~/miniconda3/etc/profile.d/conda.sh
conda init bash
source ~/.bashrc

验证:

conda --version
which conda

4.4 关闭自动进入 base

conda config --set auto_activate_base false

五、处理 Conda Terms of Service 提示

创建环境时,可能遇到:

CondaToSNonInteractiveError: Terms of Service have not been accepted

按照提示接受对应频道条款:

conda tos accept \
  --override-channels \
  --channel https://repo.anaconda.com/pkgs/main

conda tos accept \
  --override-channels \
  --channel https://repo.anaconda.com/pkgs/r

然后再创建环境。

在甲方服务器上接受任何第三方软件条款前,应确认符合甲方采购、法务和软件许可要求。


六、把大文件迁移到数据盘

本次最重要的经验之一是:

模型部署前必须先规划磁盘。不要默认把所有内容放在 /home

根分区只有几百 MB 剩余时,继续安装 vLLM 会直接报:

OSError: [Errno 28] No space left on device

6.1 创建个人数据目录

仅创建自己的子目录:

sudo mkdir -p /app/hd/data01/username/{
  conda_envs,
  conda_pkgs,
  pip_cache,
  tmp,
  models,
  huggingface,
  modelscope,
  torch,
  projects,
  logs
}

由于 Bash 多行花括号容易因格式问题出错,更稳妥的写法是:

sudo mkdir -p \
  /app/hd/data01/username/conda_envs \
  /app/hd/data01/username/conda_pkgs \
  /app/hd/data01/username/pip_cache \
  /app/hd/data01/username/tmp \
  /app/hd/data01/username/models \
  /app/hd/data01/username/huggingface \
  /app/hd/data01/username/modelscope \
  /app/hd/data01/username/torch \
  /app/hd/data01/username/projects \
  /app/hd/data01/username/logs

授权:

sudo chown -R username:username /app/hd/data01/username
chmod 700 /app/hd/data01/username

必须特别注意:

# 错误示例,可能破坏整个共享盘权限
sudo chown -R username:username /app/hd/data01

只能修改自己的子目录:

sudo chown -R username:username /app/hd/data01/username

6.2 测试目录写权限

touch /app/hd/data01/username/test_write
ls -l /app/hd/data01/username/test_write
rm /app/hd/data01/username/test_write

七、配置 Conda、pip、模型和临时目录

7.1 Conda 环境与包缓存

conda config --add envs_dirs /app/hd/data01/username/conda_envs
conda config --add pkgs_dirs /app/hd/data01/username/conda_pkgs

验证:

conda config --show envs_dirs
conda config --show pkgs_dirs

7.2 在 .bashrc 中配置缓存路径

编辑:

nano ~/.bashrc

添加:

# Personal AI workspace on data disk
export AI_DATA_ROOT="/app/hd/data01/username"

export TMPDIR="$AI_DATA_ROOT/tmp"
export PIP_CACHE_DIR="$AI_DATA_ROOT/pip_cache"

export HF_HOME="$AI_DATA_ROOT/huggingface"
export HUGGINGFACE_HUB_CACHE="$AI_DATA_ROOT/huggingface/hub"
export TRANSFORMERS_CACHE="$AI_DATA_ROOT/huggingface/transformers"

export MODELSCOPE_CACHE="$AI_DATA_ROOT/modelscope"
export TORCH_HOME="$AI_DATA_ROOT/torch"

nano 保存退出

Ctrl + O    保存
Enter       确认文件名
Ctrl + X    退出

加载配置:

source ~/.bashrc

检查:

echo "$AI_DATA_ROOT"
echo "$TMPDIR"
echo "$PIP_CACHE_DIR"
echo "$HF_HOME"
echo "$MODELSCOPE_CACHE"
echo "$TORCH_HOME"

确保目录存在:

mkdir -p \
  "$AI_DATA_ROOT/tmp" \
  "$AI_DATA_ROOT/pip_cache" \
  "$AI_DATA_ROOT/huggingface/hub" \
  "$AI_DATA_ROOT/huggingface/transformers" \
  "$AI_DATA_ROOT/modelscope" \
  "$AI_DATA_ROOT/torch"

八、重新创建 ASR 虚拟环境

为了确保环境一定在数据盘,使用完整路径创建:

conda create \
  --prefix /app/hd/data01/username/conda_envs/qwen3-asr \
  python=3.12 \
  -y

激活:

conda activate /app/hd/data01/username/conda_envs/qwen3-asr

验证:

echo "$CONDA_PREFIX"
which python
python --version
df -h "$CONDA_PREFIX"

正确结果应指向:

/app/hd/data01/username/conda_envs/qwen3-asr

不要继续使用仍位于根分区的旧环境,例如:

/home/username/miniconda3/envs/qwen3-asr

九、安装 Qwen3-ASR 与 vLLM

先升级基础工具:

python -m pip install --upgrade pip setuptools wheel

安装流式 ASR 依赖:

python -m pip install \
  --upgrade \
  --no-cache-dir \
  "qwen-asr[vllm]"

--no-cache-dir 可以减少 pip 缓存的重复占用,但安装过程仍需要临时解压空间,因此 TMPDIR 必须指向大容量数据盘。

9.1 为什么安装包很大

日志中可能看到:

vllm-0.14.0...whl 约 495 MB

这只是压缩后的 vLLM Wheel,并不是模型权重。

整个环境还包括:

Python
PyTorch
vLLM
Triton
NVIDIA CUDA Runtime
cuDNN
cuBLAS
NCCL
Transformers
音频处理依赖
Qwen-ASR Python 包

因此环境占用约 10 GB 甚至更多是正常的。

9.2 查看环境中最大的包

du -h \
  --max-depth=1 \
  "$CONDA_PREFIX/lib/python3.12/site-packages" \
  2>/dev/null | sort -h | tail -n 30

通常较大的目录包括:

nvidia/
torch/
vllm/
triton/
transformers/

不要手动删除这些目录,否则环境会损坏。


十、验证 PyTorch 和 GPU

python - <<'PY'
import torch

print("PyTorch:", torch.__version__)
print("PyTorch CUDA:", torch.version.cuda)
print("CUDA available:", torch.cuda.is_available())
print("GPU count:", torch.cuda.device_count())

for index in range(torch.cuda.device_count()):
    print(index, torch.cuda.get_device_name(index))
PY

预期:

CUDA available: True

如果为 False,检查:

nvidia-smi
echo "$CUDA_VISIBLE_DEVICES"

在 Slurm 环境中,还要确认当前 Shell 是否真的申请到了 GPU。


十一、下载模型权重

模型目录放在数据盘:

mkdir -p /app/hd/data01/username/models/Qwen3-ASR-0.6B

可以通过 ModelScope 下载:

python -m pip install --upgrade modelscope

modelscope download \
  --model Qwen/Qwen3-ASR-0.6B \
  --local_dir /app/hd/data01/username/models/Qwen3-ASR-0.6B

检查:

du -sh /app/hd/data01/username/models/Qwen3-ASR-0.6B
ls -lh /app/hd/data01/username/models/Qwen3-ASR-0.6B

本次模型目录约为 1.8 GB。


十二、启动流式 ASR 服务

12.1 启动前先看 GPU

nvidia-smi

nvidia-smi \
  --query-gpu=index,name,memory.total,memory.used,memory.free,utilization.gpu \
  --format=csv

再看每张卡上的进程:

nvidia-smi pmon -c 1

查看进程属于哪个用户:

ps -o user,pid,ppid,etime,cmd -p 进程PID

不要结束不属于自己的 GPU 进程。

12.2 指定单张 GPU

假设 GPU 5 空闲:

CUDA_VISIBLE_DEVICES=5 \
qwen-asr-demo-streaming \
  --asr-model-path /app/hd/data01/username/models/Qwen3-ASR-0.6B \
  --gpu-memory-utilization 0.60 \
  --host 127.0.0.1 \
  --port 10095

或者先导出变量:

export CUDA_VISIBLE_DEVICES=5

再启动:

qwen-asr-demo-streaming \
  --asr-model-path /app/hd/data01/username/models/Qwen3-ASR-0.6B \
  --gpu-memory-utilization 0.60 \
  --host 127.0.0.1 \
  --port 10095

需要注意:

物理 GPU 5
    ↓ CUDA_VISIBLE_DEVICES=5
程序内部通常显示为逻辑 cuda:0

因此日志里出现 cuda:0 不代表真的占用物理 GPU 0,应以 nvidia-smi 为准。

12.3 成功日志

成功启动时可看到:

Supported tasks: ['generate', 'transcription']
Model loaded.
Running on http://127.0.0.1:10095

看到:

Capturing CUDA graphs...
Graph capturing finished...

说明 vLLM 正在初始化 CUDA Graph 和推理缓存,属于正常过程。

12.4 Flask 开发服务器警告

官方 Demo 可能提示:

WARNING: This is a development server.
Do not use it in a production deployment.

当前测试阶段可以接受,因为服务只监听:

127.0.0.1

并通过 SSH 隧道访问。

甲方正式生产部署时,应增加:

  • systemd 或 Supervisor 进程托管;
  • 生产级 API 服务;
  • 鉴权;
  • HTTPS 或内网反向代理;
  • 日志轮转;
  • 健康检查;
  • 超时与并发限制;
  • GPU 资源隔离;
  • 服务启动、停止和回滚脚本。

十三、监控 GPU

另开一个 SSH 窗口:

watch -n 1 nvidia-smi

只看指定 GPU:

watch -n 1 nvidia-smi -i 5

查询简洁状态:

nvidia-smi \
  --query-gpu=index,name,memory.used,memory.free,utilization.gpu \
  --format=csv,noheader

本次服务器有多张 3090 和 4090,实际输出显示:

  • GPU 1、GPU 4 有其他实验;
  • GPU 2 已被本次 vLLM 服务占用;
  • GPU 0、3、5、6 相对空闲;
  • 新测试优先选择空闲的 GPU 5;
  • 0.6B 模型也可以在空闲的 3090 上测试。

不要只看 GPU-Util=0%。vLLM 在空闲等待请求时利用率可能是 0%,但显存已经预留。


十四、Windows 通过 SSH 隧道访问

服务器监听:

127.0.0.1:10095

这意味着外部电脑不能直接访问,需要 SSH 端口转发。

14.1 普通连接

在 Windows PowerShell 执行:

ssh -N `
  -L 127.0.0.1:18095:127.0.0.1:10095 `
  username@服务器地址

然后浏览器打开:

http://127.0.0.1:18095

映射关系:

Windows 127.0.0.1:18095
        ↓
Linux 服务器 127.0.0.1:10095

本地端口不需要和服务器端口相同。

14.2 多个服务

ssh -N `
  -L 127.0.0.1:18095:127.0.0.1:10095 `
  -L 127.0.0.1:18096:127.0.0.1:10096 `
  username@服务器地址

访问:

http://127.0.0.1:18095
http://127.0.0.1:18096

14.3 经过跳板机

ssh -N `
  -J 入口用户名@入口服务器地址 `
  -L 127.0.0.1:18095:127.0.0.1:10095 `
  username@app01

14.4 Windows 出现 Permission denied

本次遇到:

bind [127.0.0.1]:10095: Permission denied
bind [127.0.0.1]:10096: Permission denied

这通常是 Windows 本地端口被占用或处于系统保留端口范围,不是服务器模型服务拒绝连接。

处理方法是换本地端口:

ssh -N `
  -L 18095:127.0.0.1:10095 `
  username@服务器地址

检查端口占用:

Get-NetTCPConnection `
  -LocalPort 10095,10096 `
  -ErrorAction SilentlyContinue

查看 Windows 保留端口范围:

netsh interface ipv4 show excludedportrange protocol=tcp

不要随意删除 Windows 系统保留端口,直接换用 1809518096 等端口更安全。

验证本地隧道:

Test-NetConnection 127.0.0.1 -Port 18095

应看到:

TcpTestSucceeded : True

十五、常见错误与处理

15.1 conda: command not found

source ~/.bashrc

仍失败:

source ~/miniconda3/etc/profile.d/conda.sh
conda init bash
source ~/.bashrc

15.2 Conda 条款未接受

conda tos accept \
  --override-channels \
  --channel https://repo.anaconda.com/pkgs/main

conda tos accept \
  --override-channels \
  --channel https://repo.anaconda.com/pkgs/r

15.3 No space left on device

df -h
df -h "$HOME"
df -h /tmp
df -i "$HOME"
quota -s 2>/dev/null || true

清理自己的缓存:

conda clean --all -y
python -m pip cache purge
rm -rf ~/.cache/pip

但根本解决方案是把环境、缓存、临时文件和模型迁移到大容量数据盘。

15.4 安装失败后环境可能不完整

python -m pip check

如果依赖混乱,重建环境比手工修复更可靠。

15.5 GPU 被别人占用

nvidia-smi
nvidia-smi pmon -c 1
ps -o user,pid,etime,cmd -p PID

停止自己的服务:

Ctrl + C

然后指定空闲 GPU:

CUDA_VISIBLE_DEVICES=5 qwen-asr-demo-streaming ...

15.6 服务端口已占用

ss -lntp | grep 10095

换端口:

--port 10096

15.7 CUDA 不可用

nvidia-smi
python -c "import torch; print(torch.cuda.is_available())"
echo "$CUDA_VISIBLE_DEVICES"

在 Slurm 集群中,先通过调度器申请 GPU,不要在登录节点直接运行模型。


十六、空间与缓存检查命令

查看总占用:

du -h --max-depth=1 /app/hd/data01/username | sort -h

查看当前环境大小:

du -sh "$CONDA_PREFIX"

查看模型大小:

du -sh /app/hd/data01/username/models/*

查看最大的文件:

du -ah /app/hd/data01/username \
  2>/dev/null | sort -rh | head -n 30

查看根分区是谁占满的,仅做排查,不要随意删除:

sudo du -xhd1 / 2>/dev/null | sort -h
sudo du -xhd1 /var 2>/dev/null | sort -h
sudo du -xhd1 /home 2>/dev/null | sort -h
sudo journalctl --disk-usage

十七、甲方现场部署建议

今天的实验环境可以使用 Demo 快速验证,但进入甲方服务器时,应按照更严格的流程执行。

17.1 部署前确认清单

  • [ ] 获得书面或明确的系统操作授权;
  • [ ] 确认操作系统版本和 CPU 架构;
  • [ ] 确认 NVIDIA 驱动与 GPU 可见;
  • [ ] 确认 CUDA 兼容关系;
  • [ ] 确认是否使用 Docker、Conda 或离线安装;
  • [ ] 确认根分区、数据盘和用户配额;
  • [ ] 确认模型文件允许存放的位置;
  • [ ] 确认服务器是否允许访问公网;
  • [ ] 确认是否需要代理、镜像源或离线软件包;
  • [ ] 确认是否为 Slurm、Kubernetes 或其他调度环境;
  • [ ] 确认端口、防火墙、反向代理和访问控制要求;
  • [ ] 确认日志保存周期和数据脱敏要求;
  • [ ] 确认模型许可和第三方软件条款;
  • [ ] 确认备份和回滚方案。

17.2 目录规范

建议统一为:

/data/<project>/
├── envs/
├── models/
├── cache/
├── tmp/
├── app/
├── logs/
└── scripts/

不要把大模型和推理框架默认装进根分区。

17.3 安全原则

  1. 模型服务使用普通用户运行;
  2. 安装 Python 包时不使用 sudo pip
  3. 不递归修改共享盘父目录权限;
  4. 测试服务优先监听 127.0.0.1
  5. 对外暴露时必须增加鉴权和网络访问控制;
  6. 不在日志中打印密钥、Token、用户音频或敏感业务数据;
  7. 不杀死其他用户或其他业务的 GPU 进程;
  8. 使用调度系统时必须通过调度器申请资源;
  9. 所有配置变更应可追溯、可回滚;
  10. 生产环境不直接使用开发服务器。

17.4 资源控制

启动前明确指定:

CUDA_VISIBLE_DEVICES=<GPU编号>

并从较低显存利用率开始:

--gpu-memory-utilization 0.50

确认稳定后再调整到:

0.60
0.70

不要在共享服务器上直接设置过高比例。


十八、建议保存的启动脚本

创建:

nano /app/hd/data01/username/projects/start_qwen_asr.sh

内容:

#!/usr/bin/env bash
set -euo pipefail

DATA_ROOT="/app/hd/data01/username"
ENV_PATH="$DATA_ROOT/conda_envs/qwen3-asr"
MODEL_PATH="$DATA_ROOT/models/Qwen3-ASR-0.6B"
GPU_ID="${GPU_ID:-5}"
PORT="${PORT:-10095}"
GPU_MEMORY_UTILIZATION="${GPU_MEMORY_UTILIZATION:-0.60}"

export TMPDIR="$DATA_ROOT/tmp"
export PIP_CACHE_DIR="$DATA_ROOT/pip_cache"
export HF_HOME="$DATA_ROOT/huggingface"
export MODELSCOPE_CACHE="$DATA_ROOT/modelscope"
export TORCH_HOME="$DATA_ROOT/torch"
export CUDA_VISIBLE_DEVICES="$GPU_ID"

source "$HOME/miniconda3/etc/profile.d/conda.sh"
conda activate "$ENV_PATH"

exec qwen-asr-demo-streaming \
  --asr-model-path "$MODEL_PATH" \
  --gpu-memory-utilization "$GPU_MEMORY_UTILIZATION" \
  --host 127.0.0.1 \
  --port "$PORT"

赋予执行权限:

chmod +x /app/hd/data01/username/projects/start_qwen_asr.sh

运行:

/app/hd/data01/username/projects/start_qwen_asr.sh

临时指定 GPU 和端口:

GPU_ID=6 PORT=10096 \
  /app/hd/data01/username/projects/start_qwen_asr.sh

十九、建议保存的环境检查脚本

创建:

nano /app/hd/data01/username/projects/check_server.sh

内容:

#!/usr/bin/env bash
set -u

echo "===== Identity ====="
whoami
hostname

echo
echo "===== OS ====="
cat /etc/os-release 2>/dev/null || true
uname -m

echo
echo "===== Memory ====="
free -h

echo
echo "===== Filesystems ====="
df -h

echo
echo "===== Home ====="
echo "$HOME"
df -h "$HOME"

echo
echo "===== GPU ====="
nvidia-smi || true

echo
echo "===== GPU Summary ====="
nvidia-smi \
  --query-gpu=index,name,memory.total,memory.used,memory.free,utilization.gpu \
  --format=csv 2>/dev/null || true

echo
echo "===== Scheduler ====="
command -v srun || true
command -v sbatch || true

echo
echo "===== Conda ====="
command -v conda || true
conda env list 2>/dev/null || true

echo
echo "===== Current Python ====="
command -v python || true
python --version 2>/dev/null || true

赋权并运行:

chmod +x /app/hd/data01/username/projects/check_server.sh
/app/hd/data01/username/projects/check_server.sh

二十、完整复盘

今天完成的关键步骤可以概括为:

1. 创建独立 Linux 用户
2. 配置 sudo 和个人 Home
3. 在无 Python 环境下安装 Miniconda
4. 处理 Conda 初始化和 ToS
5. 发现根分区已满
6. 找到大容量数据盘
7. 将 Conda 环境、缓存、临时文件和模型迁移到数据盘
8. 安装 qwen-asr[vllm]
9. 下载 Qwen3-ASR 模型
10. 验证 PyTorch 和 CUDA
11. 启动 vLLM 流式 ASR Demo
12. 查看实际占用的物理 GPU
13. 使用 CUDA_VISIBLE_DEVICES 避开其他用户实验
14. 通过 Windows SSH 隧道访问服务
15. 解决 Windows 本地端口 Permission denied

最值得记住的经验是:

先盘点,再安装;先规划磁盘,再下载;先确认 GPU,再启动;测试服务只监听本机,通过 SSH 隧道访问。

进入甲方环境后,部署成功并不只是“模型能跑起来”,还必须同时考虑:

  • 权限隔离;
  • 磁盘规划;
  • GPU 调度;
  • 网络边界;
  • 软件许可;
  • 安全审计;
  • 日志管理;
  • 服务托管;
  • 故障恢复;
  • 后续运维。

附录 A:本次最常用命令速查

激活环境

conda activate /app/hd/data01/username/conda_envs/qwen3-asr

查看 GPU

nvidia-smi
nvidia-smi pmon -c 1

指定 GPU 启动

CUDA_VISIBLE_DEVICES=5 \
qwen-asr-demo-streaming \
  --asr-model-path /app/hd/data01/username/models/Qwen3-ASR-0.6B \
  --gpu-memory-utilization 0.60 \
  --host 127.0.0.1 \
  --port 10095

Windows SSH 隧道

ssh -N `
  -L 127.0.0.1:18095:127.0.0.1:10095 `
  username@服务器地址

浏览器访问

http://127.0.0.1:18095

查看目录占用

du -h --max-depth=1 /app/hd/data01/username | sort -h

查看根分区

df -h /

停止服务

Ctrl + C

附录 B:甲方部署记录模板

项目名称:
客户名称:
部署日期:
部署人员:

服务器主机名:
操作系统:
CPU 架构:
内存:
GPU 型号与数量:
NVIDIA 驱动版本:
CUDA 可见版本:
是否使用调度器:

运行账号:
环境目录:
模型目录:
缓存目录:
日志目录:
服务端口:
监听地址:
指定 GPU:
模型版本:
Python 版本:
PyTorch 版本:
vLLM 版本:

安装方式:在线 / 离线
网络代理:
镜像源:
防火墙策略:
访问方式:SSH 隧道 / 反向代理 / 内网直连

启动命令:
停止命令:
健康检查命令:
日志查看命令:
回滚方案:

测试音频:
识别结果:
首字延迟:
最终结果延迟:
显存占用:
GPU 利用率:
已知问题:
后续事项:

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇