JoyAI-VL-Interaction-AutoDL部署教程

📅 2026/7/19 18:40:05
JoyAI-VL-Interaction-AutoDL部署教程
JoyAI-VL-Interaction 在 AutoDL 上的完整部署教程本教程记录了在 AutoDL 单卡vGPU-48GB / RTX 4090 48G上从零部署京东开源的 JoyAI-VL-Interaction 实时视觉语言交互模型并成功让模型分析自定义视频的全过程。已踩平所有坑照着走即可。零、环境与前提项目地址https://github.com/jd-opensource/JoyAI-VL-Interaction这个项目只能跑在 Linux NVIDIA GPU 上底层是 vLLM vLLM-Omni不支持原生 Windows。本教程实测环境AutoDL 实例单张 vGPU-48GBRTX 4090 48G 显存版CPU 25 核 / 内存 92GB / 系统盘 30G / 数据盘 50G镜像PyTorch 2.x CUDA 12.xPython 3.12vLLM 版本0.22.0显存说明这套系统默认是为双卡设计的主模型一张卡、摘要模型一张卡。单卡要跑通核心技巧是跳过摘要模型见第六步。如果你租的是双卡可以直接用官方默认配置省去大量调参。四个模型总大小约 33GB模型大小作用JoyAI-VL-Interaction-Preview主模型8B~17.5G核心视觉交互Qwen3-VL-4B-Instruct摘要模型~8.9G长期记忆压缩单卡可跳过Qwen3-ASR-1.7B~3.5G语音输入可选Qwen3-TTS-1.7B~3.5G语音输出可选一、租实例与省钱下载1.1 选实例GPU单张 48G 显存的卡最省心能一卡跑通。若选 24G 卡需更激进地砍参数。镜像选 PyTorch CUDA 12.x 基础镜像。数据盘50G 基本够模型 33G 依赖紧张的话扩到 60-100G。1.2 【省钱关键】用无卡模式下载GPU 模式按小时计费如 3 元/时而下载模型用不到 GPU。做法实例创建后先关机用无卡模式开机约 0.1 元/时在无卡模式下完成 clone 代码、装依赖、下载模型全部下完再关机切换回 GPU 模式跑服务⚠️坑无卡模式内存小下载 17.5G 主模型时可能被 OOM 杀掉报Killed。若遇到改用 GPU 模式下载内存大或用后面的 hf-mirror 单线程方案。二、装依赖2.1 所有数据放数据盘cd/root/autodl-tmpgitclone https://github.com/jd-opensource/JoyAI-VL-Interaction.gitcdJoyAI-VL-Interaction⚠️坑模型和数据必须放数据盘/root/autodl-tmp/。官方默认路径是/tmp/models但 AutoDL 的/tmp在 30G 的系统盘上会撑爆。后面所有模型路径都要手动指到数据盘。2.2 装依赖关键网络方向别搞反# 装国内 pip 包 → 必须【关闭】学术加速代理unsethttp_proxy https_proxy HTTP_PROXY HTTPS_PROXY# uv 配置国内镜像 拉长超时 copy 模式 缓存放数据盘exportUV_DEFAULT_INDEXhttps://mirrors.aliyun.com/pypi/simple/exportUV_HTTP_TIMEOUT600exportUV_LINK_MODEcopyexportUV_CACHE_DIR/root/autodl-tmp/.uv-cache ./install/install.sh --with-all⚠️坑学术加速代理会拖垮国内 pip 源。source /etc/network_turbo是为了下 GitHub/HuggingFace 的装国内 pip 包时必须先unset关掉否则大 wheel如 av、opencv会超时失败error decoding response body。记忆口诀装 pip 包 → 关代理unset下 HuggingFace 模型 → 开代理network_turbo。方向正好相反。装完后.uv-cache可占用 9G装完可删释放空间rm-rf/root/autodl-tmp/.uv-cache三、下载模型3.1 激活环境每次新终端都要做source/root/autodl-tmp/JoyAI-VL-Interaction/services/.venv/bin/activate确认命令行前面出现(.venv)前缀。3.2 下载推荐 hf-mirror 关 XetexportHF_ENDPOINThttps://hf-mirror.comexportHF_HUB_DISABLE_XET1# 关键关掉 Xet否则 401 报错exportMODEL_PATH/root/autodl-tmp/models/JoyAI-VL-Interaction-PreviewexportSUMMARY_MODEL_PATH/root/autodl-tmp/models/Qwen3-VL-4B-Instruct /root/autodl-tmp/JoyAI-VL-Interaction/install/download-models.sh--all⚠️坑 1Xet 协议 401 错误。新版 huggingface_hub 默认走 Xet 下载hf-mirror 认证不了会报401 Unauthorized。必须export HF_HUB_DISABLE_XET1退回传统 HTTP 下载。⚠️坑 2hf-mirror 大文件卡住。公益镜像高峰期单个大文件可能卡死。若卡住CtrlC后重跑自动断点续传。备选Qwen 系列用 ModelScope 更快国内满速pipinstall-ihttps://mirrors.aliyun.com/pypi/simple/ modelscope modelscope download--modelQwen/Qwen3-VL-4B-Instruct--local_dir/root/autodl-tmp/models/Qwen3-VL-4B-Instruct3.3 验证模型完整du-sh/root/autodl-tmp/models/*主模型约 17.5G、Qwen3-VL-4B 约 8.9G数值接近即完整。四、切换 GPU 模式理解显存机制下载完成后关机 → GPU 模式开机。关键认知vLLM 显存机制gpu_memory_utilization是按整张卡算的百分比不是按剩余显存。单卡跑两个模型时谁先启动谁按百分比圈走显存容易把后启动的挤到没有 KV cache报负数。主模型加载占 16.65Gmax_model_len默认 13107212万上下文光 KV cache 就要 18G是显存杀手。五、清理显存的通用操作反复要用每次启动失败后vLLM 进程常残留占着显存重启前必须清干净否则新进程抢不到显存# 杀掉所有占 GPU 的进程nvidia-smi --query-compute-appspid--formatcsv,noheader|xargs-rkill-9pkill-9-flive_adaptersleep3# 必须确认显存归零0MiB / xxxxxMiBNo running processes foundnvidia-smi⚠️坑pkill -9 -f vllm有时杀不干净进程名是大写VLLM::EngineCore。用上面nvidia-smi --query-compute-apps抓 PID 的方式最可靠。看到 0MiB 才能重启。六、【核心】单卡启动服务跳过摘要模型单卡无法同时跑主模型 摘要模型显存互抢摘要 KV cache 永远负数。解法把摘要健康检查指向主模型端口跳过它。摘要只负责长期记忆压缩跳过不影响实时视觉交互。先按第五步清干净显存确认0MiB后source/root/autodl-tmp/JoyAI-VL-Interaction/services/.venv/bin/activatecd/root/autodl-tmp/JoyAI-VL-InteractionexportMODEL_PATH/root/autodl-tmp/models/JoyAI-VL-Interaction-PreviewexportSUMMARY_MODEL_PATH/root/autodl-tmp/models/Qwen3-VL-4B-InstructexportMAIN_GPU0exportSUMMARY_GPU0exportMAX_MODEL_LEN32768# 砍上下文省显存默认 131072 太大exportMAIN_GPU_MEMORY_UTILIZATION0.85# 主模型独占大显存exportSUMMARY_PORT7060# 【关键】跳过摘要指向主模型端口./services/scripts/run.sh minimal原理脚本用wait_for_http检查http://127.0.0.1:${SUMMARY_PORT}/v1/models来判断摘要是否就绪。把SUMMARY_PORT设成 7060主模型端口这个检查会去查活着的主模型秒过脚本直接启动 WebUI不再等永远起不来的摘要。启动成功的标志日志依次出现Ready: webinfer main model. Ready: webinfer summary model. ← 跳过检查秒过 Ready: webinfer adapter. [2/2] Started WebUI. Running on https://0.0.0.0:8099主模型Available KV cache memory是正的十几 G即正常。这个窗口是前台运行 WebUI别关。⚠️坑单卡各种显存报错汇总Available KV cache memory: -X GiB/No available memory→ 摘要和主模型抢显存。单卡用上面的跳过摘要方案解决。max seq len (131072) needs 18 GiB KV cache→max_model_len太大砍到 32768。address already in use (8070)→ 上次的适配器进程没退按第五步清干净重启。双卡用户更简单不用跳过摘要直接export SUMMARY_GPU1用官方默认主模型 GPU 0、摘要 GPU 1 各占一张卡无需调参。七、连接浏览器SSH 隧道WebUI 跑在服务器的https://127.0.0.1:8099且需要 localhost 才能获得摄像头权限。用SSH 隧道转发在本地电脑不是服务器新开终端把 AutoDL 控制台的 SSH 登录指令加上端口转发ssh-p你的端口-L8099:127.0.0.1:8099 root你的AutoDL主机名保持这个窗口开着本地浏览器打开https://localhost:8099过掉自签证书警告“高级” → “继续前往”即可看到界面。⚠️重要提示SSH 隧道传不了 WebRTC。这个 WebUI 的实时画面无论摄像头还是 RTSP都通过 WebRTC 回传浏览器而 WebRTC 走 UDP ICE 打洞穿不过只转发 TCP 的 SSH 隧道。表现为画面几秒就断、0 frames received、ICE connection state: checking卡住。所以在纯 SSH 隧道下浏览器里看不到实时画面预览。但这不影响模型工作——见第九步用命令行直接验证模型效果。八、可选RTSP 推流分析视频文件比起摄像头用视频文件推 RTSP 更适合云端。流在服务器内部生成和消费但画面预览仍受 WebRTC 限制无法回传浏览器模型分析本身正常。8.1 装 MediaMTX 和 ffmpegcd/root/autodl-tmpsource/etc/network_turbowgethttps://github.com/bluenviron/mediamtx/releases/download/v1.19.2/mediamtx_v1.19.2_linux_amd64.tar.gztar-xzfmediamtx_v1.19.2_linux_amd64.tar.gzunsethttp_proxy https_proxyaptupdateaptinstall-yffmpeg⚠️坑MediaMTX 端口冲突。默认它会开 HLS(8888)、RTMP(1935) 等端口任一被占就整个退出。精简配置只留 RTSPcat/root/autodl-tmp/mediamtx.ymlEOF rtsp: yes rtspAddress: :8554 rtmp: no hls: no webrtc: no srt: no paths: all_others: EOF8.2 启动推流各开一个终端都要保持运行# 终端 A启动 RTSP 服务器cd/root/autodl-tmp./mediamtx# 终端 B把视频循环推成 RTSP 流-an 去音频cd/root/autodl-tmp ffmpeg-re-stream_loop-1-i1.mp4-ccopy-an-frtsp rtsp://127.0.0.1:8554/live8.3 WebUI 填地址Video Source → RTSP Stream tab → 填rtsp://127.0.0.1:8554/live→ Start。显示✅ Connected!即后端已读到流但画面预览仍受 WebRTC 限制。九、【推荐】命令行直接验证模型效果绕开 WebRTC直接把视频帧发给主模型看分析效果。这是纯 SSH 隧道下验证模型能力最可靠的方式。9.1 从视频抽一帧cd/root/autodl-tmp ffmpeg-i1.mp4-vfselecteq(n\,100)-frames:v1frame.jpg9.2 发给模型分析source/root/autodl-tmp/JoyAI-VL-Interaction/services/.venv/bin/activatecd/root/autodl-tmp python3EOF import base64, requests, json with open(frame.jpg, rb) as f: img_b64 base64.b64encode(f.read()).decode() resp requests.post( http://127.0.0.1:7060/v1/chat/completions, json{ model: JoyAI-VL-Interaction-Preview, messages: [{ role: user, content: [ {type: text, text: 详细描述这张图片里的内容}, {type: image_url, image_url: {url: fdata:image/jpeg;base64,{img_b64}}} ] }], max_tokens: 512 }, timeout60 ) print(resp.json()[choices][0][message][content]) EOF改text那句就能问不同问题例如做 SOP 检测“这位工人的操作是否规范有没有遗漏防护措施”十、停止服务与省钱跑服务的窗口CtrlC停止或./services/scripts/stop.sh all。测完立刻去 AutoDL 控制台关机——GPU 模式一直烧钱。模型已在数据盘下次无卡开机 → GPU 开机 → 直接第六步启动不用重下。附关键环境变量速查变量值说明MODEL_PATH/root/autodl-tmp/models/JoyAI-VL-Interaction-Preview主模型路径放数据盘SUMMARY_MODEL_PATH/root/autodl-tmp/models/Qwen3-VL-4B-Instruct摘要模型路径MAIN_GPU/SUMMARY_GPU0/0单卡或0/1双卡GPU 分配MAX_MODEL_LEN32768主模型上下文默认 131072 太大MAIN_GPU_MEMORY_UTILIZATION0.85单卡跳过摘要主模型显存配额SUMMARY_PORT7060单卡跳过摘要的关键HF_ENDPOINThttps://hf-mirror.com下载用镜像HF_HUB_DISABLE_XET1下载时关 Xet 防 401附常见报错速查现象原因解决error decoding response body装依赖学术加速代理拖垮国内源unset http_proxy https_proxyKilled下模型无卡模式内存不足 OOM换 GPU 模式下或--max-workers 1401 Unauthorized下模型Xet 协议export HF_HUB_DISABLE_XET1No available memory for cache blocks单卡双模型抢显存跳过摘要SUMMARY_PORT7060max seq len needs X GiB KV cache上下文太大MAX_MODEL_LEN32768address already in use旧进程残留占端口第五步清进程failed to be inspected/ NVMLInvalid Argument摘要摘要被分到不存在的 GPU 1单卡设SUMMARY_GPU0画面几秒就断 /0 frames receivedWebRTC 穿不过 SSH 隧道用第九步命令行验证模型本教程基于 2026 年 7 月实测整理vLLM 0.22.0 / MediaMTX 1.19.2。项目为 Preview 版模型本身可能仍有更新遇到未知问题可查仓库 Issues。