Duix.Heygem
Duix.Heygem copied to clipboard
提交定制失败 & 建立funasr连接异常的解决方法
问题描述
在部署 Duix-Avatar 项目时,上传视频进行“快速定制”时失败。
前端可能提示 SQLite 错误,或者长时间无响应。
查看后台日志 (docker logs -f duix-avatar-gen-video),出现以下报错:
- 连接异常:
WARNING | asr_fun:init_conn:53 - 建立funasr连接异常:[Errno -2] Name or service not known socket.gaierror: [Errno -2] Name or service not known - ASR启动失败:
/run.sh: 10: --hotword: not found
原因分析
经过排查,主要存在两个问题叠加:
- 容器网络名称不匹配:主程序代码中硬编码了连接地址为 ws://funasr:10095,但在 docker-compose.yml 中,ASR 服务的容器名被定义为 duix-avatar-asr,导致主程序无法解析主机名(Name not known)。
- 镜像脚本 Bug:官方镜像 guiji2025/fun-asr 中的启动脚本 /run.sh 存在语法错误。在 --certfile 0 这一行后面少了一个换行斜杠 \,导致 --hotword 参数变成了未知命令,ASR 服务因此无法正常启动。
解决方案
不需要重新构建镜像,只需修改 docker-compose.yml 文件即可。 请将 duix-avatar-asr 服务的配置替换为以下内容:
- 将 container_name 强制指定为 funasr
- 重写 command 指令,手动修复断裂的启动脚本
修改后的 docker-compose.yml 完整代码:
networks:
ai_network:
driver: bridge
services:
duix-avatar-tts:
image: guiji2025/fish-speech-ziming
container_name: duix-avatar-tts
restart: always
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=0
- NVIDIA_DRIVER_CAPABILITIES=compute,graphics,utility,video,display
ports:
- '18180:8080'
volumes:
- d:/duix_avatar_data/voice/data:/code/data
command: /bin/bash -c "/opt/conda/envs/python310/bin/python3 tools/api_server.py --listen 0.0.0.0:8080"
networks:
- ai_network
duix-avatar-asr:
image: guiji2025/fun-asr
# ----------------------------------------------------------------
# 【修复点 1】:容器名称必须叫 funasr,否则主程序连接时会报 "Name not known"
# ----------------------------------------------------------------
container_name: funasr
restart: always
runtime: nvidia
privileged: true
working_dir: /workspace/FunASR/runtime
ports:
- '10095:10095'
# ----------------------------------------------------------------
# 【修复点 2】:重写启动命令,修复原镜像 run.sh 中缺失斜杠的 Bug
# 我们在这里把断掉的命令手动连起来,并加上正确的 --hotword 参数
# ----------------------------------------------------------------
command: >
bash -c "bash run_server.sh
--download-model-dir /workspace/models
--vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx
--model-dir damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch
--punc-dir damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx
--lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst
--itn-dir thuduj12/fst_itn_zh
--certfile 0
--hotword /workspace/models/hotwords.txt > log.txt 2>&1 &
tail -f log.txt"
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
networks:
- ai_network
duix-avatar-gen-video:
image: guiji2025/duix.avatar
container_name: duix-avatar-gen-video
restart: always
runtime: nvidia
privileged: true
volumes:
- d:/duix_avatar_data/face2face:/code/data
environment:
- PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
shm_size: '8g'
ports:
- '8383:8383'
command: python /code/app_local.py
networks:
- ai_network
生效步骤
修改保存后,执行以下命令重建容器:
docker-compose down
docker-compose up -d
本来准备试一试的,但是我是cuda12.8,用的docker-compose-5090.yml启动的容器,没有duix-avatar-asr服务。 @lbxmaker
本来准备试一试的,但是我是cuda12.8,用的docker-compose-5090.yml启动的容器,没有duix-avatar-asr服务。 @lbxmaker
50系为了兼容砍掉了asr服务(要不然都部署不了),取舍的结果就是数字人的声音克隆效果会变差。