news 2026/4/18 3:39:25

HY-Motion 1.0入门指南:如何修改start.sh适配自定义端口与GPU绑定

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HY-Motion 1.0入门指南:如何修改start.sh适配自定义端口与GPU绑定

HY-Motion 1.0入门指南:如何修改start.sh适配自定义端口与GPU绑定

1. 为什么你需要改start.sh?——从默认启动到生产就绪的一步之遥

你刚下载完HY-Motion 1.0镜像,执行bash /root/build/HY-Motion-1.0/start.sh,浏览器打开http://localhost:7860/,界面出来了,模型也加载成功了。但很快你就遇到几个现实问题:

  • 公司内网环境里,7860端口已被其他服务占用;
  • 服务器上插着4张A100,但默认只用第0号GPU,显存浪费严重;
  • 团队多人协作时,需要同时跑多个实例,每个实例得对应不同端口和GPU;
  • 你想把服务暴露给局域网同事调试,但默认只监听127.0.0.1。

这些问题,都不需要重装模型、不需改Python代码、更不用碰模型权重——它们全在一行脚本里:start.sh

这行看似简单的启动脚本,其实是连接你和HY-Motion能力的“控制闸门”。它不负责模型推理,却决定了谁能访问、用哪块卡、走哪个端口、是否支持跨域、日志怎么输出……换句话说:它管的是“怎么用”,而不是“能不能用”

本文不讲DiT架构原理,也不展开Flow Matching数学推导。我们聚焦一个工程师每天都会面对的真实动作:打开终端,编辑一个shell文件,保存,运行,立刻生效。全程无需重启容器、不依赖Docker Compose编排、不涉及CUDA版本切换——就是最朴素的手动配置。

你会学到:

  • start.sh里真正起作用的5个关键变量;
  • 如何安全地绑定指定GPU(不止是CUDA_VISIBLE_DEVICES=0那种粗暴写法);
  • 怎样让Gradio服务既能在本地访问,也能被同网段同事打开;
  • 为什么直接改端口可能报错,以及两个必须同步调整的位置;
  • 一个防手误的检查清单,避免改完启动失败却找不到原因。

所有操作均基于官方镜像原始结构,不破坏原有部署逻辑,改完即可复用社区提供的全部提示词模板和测试案例。

2. 拆解start.sh:5个决定服务行为的核心参数

先别急着改。我们先看清它的本来面目。进入镜像后执行:

cat /root/build/HY-Motion-1.0/start.sh

你会看到类似这样的内容(已简化注释,实际脚本更长):

#!/bin/bash export PYTHONPATH="/root/build/HY-Motion-1.0:$PYTHONPATH" cd /root/build/HY-Motion-1.0 # 👇 这行才是真正启动Gradio的命令 python app.py \ --share \ --server-name 127.0.0.1 \ --server-port 7860 \ --enable-xformers \ --num-gpus 1

注意:这不是伪代码,而是真实脚本中最精简但完全可运行的核心片段。其中真正影响服务行为的,只有以下5个参数,其余如--enable-xformers属于性能优化项,不影响端口/GPU绑定逻辑。

2.1--server-name:谁可以访问你的服务?

  • 默认值:127.0.0.1
  • 含义:Gradio服务监听的网络接口地址
  • 常见误区:以为设成0.0.0.0就能外网访问 → 错!这只是放开监听范围,还受防火墙和云服务器安全组限制
  • 安全建议:
    • 本地单机开发:保持127.0.0.1(最安全)
    • 局域网协作调试:改为0.0.0.0
    • 生产环境暴露:必须配合Nginx反向代理 + Basic Auth,绝不直接暴露0.0.0.0

正确做法示例(局域网调试):

--server-name 0.0.0.0

❌ 危险写法(暴露公网且无防护):

--server-name 0.0.0.0 # 未配防火墙/Nginx时禁用

2.2--server-port:端口不是改一个地方就够

  • 默认值:7860
  • 关键事实:这个参数只控制Gradio内部HTTP服务端口,不控制外部映射端口
  • 隐形依赖:如果你用docker run -p 8080:7860启动容器,那么:
    • 外部访问用http://your-ip:8080
    • 脚本里--server-port仍必须是7860(否则容器内服务不响应)
  • 唯一例外:裸机部署(非Docker),此时改这里就等于改最终端口

推荐做法(Docker环境):

  • 容器外映射端口由docker run -p决定
  • start.sh--server-port保持默认7860,避免混淆

推荐做法(裸机部署):

  • 直接修改此处为你想要的端口,例如--server-port 8000

2.3--num-gpus:控制并行推理卡数,不是显存分配开关

  • 默认值:1
  • 真实作用:告诉HY-Motion主程序“启动几个GPU进程”,每个进程独占一块卡
  • 重要限制:该值不能超过你物理GPU数量,也不能超过CUDA_VISIBLE_DEVICES可见设备数
  • 常见错误:设成--num-gpus 2但没设置CUDA_VISIBLE_DEVICES="0,1"→ 程序报错找不到设备

正确组合示例(用第1、2号GPU):

export CUDA_VISIBLE_DEVICES="1,2" python app.py --num-gpus 2 ...

注意:--num-gpus值必须与CUDA_VISIBLE_DEVICES中逗号分隔的ID数量严格一致。

2.4CUDA_VISIBLE_DEVICES:GPU可见性控制的黄金法则

  • 默认:未显式设置 → 系统自动识别所有GPU
  • 本质:Linux环境变量,在进程启动前屏蔽/暴露特定GPU
  • 为什么不能只靠--num-gpus?因为HY-Motion底层PyTorch调用torch.cuda.device_count()获取可用卡数,而这个函数读取的就是CUDA_VISIBLE_DEVICES的值

安全写法(绑定第0、3号GPU):

export CUDA_VISIBLE_DEVICES="0,3" python app.py --num-gpus 2 ...

单卡极致性能写法(强制只用第1号GPU,避免多卡通信开销):

export CUDA_VISIBLE_DEVICES="1" python app.py --num-gpus 1 ...

❌ 危险写法(ID不存在):

export CUDA_VISIBLE_DEVICES="99" # 服务器根本没有99号GPU

2.5--share:临时公网链接的双刃剑

  • 默认:启用(生成xxx.gradio.live链接)
  • 用途:快速分享给他人体验,适合演示/临时评审
  • 风险:生成的链接可被任何人访问,且无法设置密码
  • 替代方案:局域网内用--server-name 0.0.0.0+ 内网IP访问,更可控

生产环境建议:删除--share参数,改用内网IP访问

3. 实战修改:三步完成端口与GPU绑定定制

现在我们动手改。整个过程不需要任何编译、不安装新包、不重启系统,改完即生效。

3.1 第一步:备份原脚本(防手抖)

cp /root/build/HY-Motion-1.0/start.sh /root/build/HY-Motion-1.0/start.sh.bak

小技巧:.bak后缀能让大多数编辑器自动识别为备份文件,避免误删

3.2 第二步:编辑start.sh,注入自定义配置

用你喜欢的编辑器打开(推荐nanovim):

nano /root/build/HY-Motion-1.0/start.sh

找到python app.py \这一行(通常在文件末尾),将其替换为以下模板(根据你的需求选择一种):

场景A:单机开发,想用8000端口 + 只用第2号GPU
export CUDA_VISIBLE_DEVICES="2" python app.py \ --server-name 127.0.0.1 \ --server-port 8000 \ --num-gpus 1 \ --enable-xformers
场景B:团队服务器,4张A100,需同时跑2个实例(实例1用卡0/1,实例2用卡2/3)

提示:两个实例需分别放在不同目录,或修改各自start.sh中的端口

实例1(卡0/1,端口7860):

export CUDA_VISIBLE_DEVICES="0,1" python app.py \ --server-name 0.0.0.0 \ --server-port 7860 \ --num-gpus 2 \ --enable-xformers

实例2(卡2/3,端口7861):

export CUDA_VISIBLE_DEVICES="2,3" python app.py \ --server-name 0.0.0.0 \ --server-port 7861 \ --num-gpus 2 \ --enable-xformers
场景C:云服务器部署,需通过域名访问(假设已配Nginx反代到80端口)
export CUDA_VISIBLE_DEVICES="0" python app.py \ --server-name 127.0.0.1 \ --server-port 7860 \ --num-gpus 1 \ --enable-xformers

此时Nginx配置示例(供参考):

location / { proxy_pass http://127.0.0.1:7860; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }

3.3 第三步:验证修改是否生效

执行修改后的脚本:

bash /root/build/HY-Motion-1.0/start.sh

观察终端输出,重点确认三处:

  1. GPU识别日志:应出现类似
    Found 1 CUDA device(s): [GeForce RTX 4090](数字与你设置的CUDA_VISIBLE_DEVICES一致)

  2. 端口监听日志:应显示
    Running on local URL: http://127.0.0.1:8000(端口号与你设置一致)

  3. 无报错启动:最后几行应是Gradio的To create a public link, set --share提示,而非CUDA out of memoryAddress already in use

验证访问:

  • 本地开发:打开http://localhost:8000
  • 局域网:打开http://[服务器IP]:7860
  • Nginx反代:打开https://your-domain.com

4. 进阶技巧:让配置更灵活、更健壮

上面的修改已满足90%场景,但如果你希望更工程化,可以加入这些增强项。

4.1 使用环境变量替代硬编码(推荐)

修改start.sh,把端口/GPU等参数抽成变量:

#!/bin/bash # 👇 自定义配置区(只需改这里) export SERVER_PORT=${SERVER_PORT:-7860} export GPU_IDS=${GPU_IDS:-"0"} export SERVER_NAME=${SERVER_NAME:-"127.0.0.1"} export CUDA_VISIBLE_DEVICES="$GPU_IDS" python app.py \ --server-name "$SERVER_NAME" \ --server-port "$SERVER_PORT" \ --num-gpus $(echo "$GPU_IDS" | tr ',' '\n' | wc -l) \ --enable-xformers

启动时这样用,无需改脚本:

SERVER_PORT=8000 GPU_IDS="1,2" bash /root/build/HY-Motion-1.0/start.sh

4.2 添加GPU健康检查(防静默失败)

python app.py前插入检测逻辑:

# 检查CUDA_VISIBLE_DEVICES指定的GPU是否存在 for gpu_id in $(echo "$GPU_IDS" | tr ',' ' '); do if ! nvidia-smi -i "$gpu_id" --query-gpu=name --format=csv,noheader 2>/dev/null; then echo "❌ GPU $gpu_id not found. Check nvidia-smi output." exit 1 fi done

4.3 日志分离:避免终端刷屏干扰

将Gradio日志重定向到文件,方便排查:

python app.py ... 2>&1 | tee -a /root/build/HY-Motion-1.0/logs/start_$(date +%Y%m%d).log

5. 常见问题速查表(改完启动失败?先看这里)

现象最可能原因快速解决
Address already in use端口被占用,或上一个进程未退出lsof -i :7860kill -9 <PID>,或换端口
CUDA out of memory--num-gpus>CUDA_VISIBLE_DEVICES中GPU数检查nvidia-smi,确保--num-gpus与可见GPU数量一致
页面空白/加载失败--server-name设为0.0.0.0但防火墙拦截sudo ufw allow 7860(Ubuntu)或检查云服务器安全组
启动后立即退出app.py路径错误或权限不足ls -l /root/build/HY-Motion-1.0/app.py,确认存在且可执行
GPU识别为0块CUDA_VISIBLE_DEVICES格式错误(空格/中文逗号)改为英文逗号,如"0,1",不要"0,1"

终极排查命令(一行搞定):
echo "GPU可见数: $(nvidia-smi -L \| wc -l), 当前可见: $CUDA_VISIBLE_DEVICES, Python检测: $(python3 -c "import torch; print(torch.cuda.device_count())")"

6. 总结:你掌握的不只是改脚本,而是服务治理的第一课

改一个start.sh,表面看是技术操作,背后是你对AI服务部署逻辑的完整理解:

  • 你明白了网络层(server-name/port)与资源层(CUDA_VISIBLE_DEVICES/num-gpus)的分离设计;
  • 你区分了开发便利性(--share)与生产安全性(0.0.0.0 + 防火墙)的本质差异;
  • 你建立了配置即代码的意识——所有环境差异,都应收敛到可版本管理的文本中;
  • 你获得了故障自愈能力——当服务异常,不再盲目重启,而是看日志、查GPU、验端口、比配置。

HY-Motion 1.0的强大,在于十亿参数带来的动作表现力;而你的强大,在于能把它稳稳地、恰当地、按需地,落到每一台服务器、每一块GPU、每一个端口上。

下一步,你可以:

  • 把修改后的start.sh提交到Git,实现配置版本化;
  • 编写stop.sh脚本,用pkill -f "python app.py"优雅终止;
  • 尝试用systemd将服务注册为系统守护进程;
  • 或者,直接跳到提示词工程,用你刚刚搭好的服务,生成第一个电影级3D动作。

真正的AI落地,从来不在模型参数里,而在你敲下的每一行配置中。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 0:29:34

Z-Image-ComfyUI真实体验:中文提示词不再乱码

Z-Image-ComfyUI真实体验&#xff1a;中文提示词不再乱码 做中文AIGC的开发者&#xff0c;大概都经历过那种“输入很认真&#xff0c;输出很离谱”的时刻——明明写的是“青砖黛瓦的江南水乡&#xff0c;小桥流水&#xff0c;撑伞女子缓步而行”&#xff0c;结果图里冒出英文招…

作者头像 李华
网站建设 2026/3/14 5:58:35

手把手打造DIY机器人:基于Arduino的智能清洁解决方案全指南

手把手打造DIY机器人&#xff1a;基于Arduino的智能清洁解决方案全指南 【免费下载链接】VacuumRobot DIY Vacuum Robot project 项目地址: https://gitcode.com/gh_mirrors/va/VacuumRobot 在智能家居快速发展的今天&#xff0c;自制扫地机器人正成为创客社区的新宠。本…

作者头像 李华
网站建设 2026/4/10 8:30:51

Dify在Kubernetes部署与LLM应用优化实战指南

Dify在Kubernetes部署与LLM应用优化实战指南 【免费下载链接】dify-helm Deploy langgenious/dify, an LLM based app on kubernetes with helm chart 项目地址: https://gitcode.com/gh_mirrors/di/dify-helm Dify容器化部署是实现LLM应用在Kubernetes环境高效运行的关…

作者头像 李华
网站建设 2026/4/16 17:51:56

只需三步:激活环境→复制文件→运行python推理.py

只需三步&#xff1a;激活环境→复制文件→运行python推理.py 1. 引言&#xff1a;为什么“三步”真的够用&#xff1f; 你有没有试过部署一个图像识别模型&#xff0c;结果卡在环境配置上一整天&#xff1f;装错Python版本、pip依赖冲突、CUDA版本不匹配……最后连第一张图都…

作者头像 李华
网站建设 2026/3/13 7:05:48

如何零基础快速上手Vue聊天组件开发

如何零基础快速上手Vue聊天组件开发 【免费下载链接】vue-beautiful-chat A simple and beautiful Vue chat component backend agnostic, fully customisable and extendable. 项目地址: https://gitcode.com/gh_mirrors/vu/vue-beautiful-chat Vue聊天组件是现代Web应…

作者头像 李华