HeyGem.ai 项目 Docker 部署指南:TTS、ASR 与视频生成服务集成
2025-07-06 06:05:04作者:乔或婵
项目概述
HeyGem.ai 是一个集成了多种AI能力的综合项目,通过Docker容器化部署方案,可以快速搭建包含文本转语音(TTS)、自动语音识别(ASR)和视频生成功能的完整AI服务环境。本指南将详细解析其Docker Compose配置,帮助开发者理解并部署这一AI服务栈。
核心服务组件
1. 网络配置
项目首先定义了一个名为ai_network
的桥接网络,所有服务都将连接到此网络,实现服务间通信:
networks:
ai_network:
driver: bridge
这种设计确保了各服务可以相互发现和通信,同时与外部网络隔离,提高了安全性。
2. 文本转语音服务 (heygem-tts)
heygem-tts:
image: guiji2025/fish-speech-ziming
container_name: heygem-tts
restart: always
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=0
- NVIDIA_DRIVER_CAPABILITIES=compute,graphics,utility,video,display
ports:
- '18180:8080'
volumes:
- d:/heygem_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
技术解析:
- 基于
fish-speech-ziming
镜像,这是一个专门优化的TTS引擎 - 配置了NVIDIA GPU支持,确保高质量的语音合成
- 数据卷映射将本地
d:/heygem_data/voice/data
目录挂载到容器内,用于持久化语音数据 - 通过API服务器提供8080端口的服务,外部映射到18180端口
最佳实践建议:
- 对于生产环境,建议配置GPU监控以确保资源合理分配
- 可以调整NVIDIA_VISIBLE_DEVICES参数来指定使用的GPU设备
3. 自动语音识别服务 (heygem-asr)
heygem-asr:
image: guiji2025/fun-asr
container_name: heygem-asr
restart: always
runtime: nvidia
privileged: true
working_dir: /workspace/FunASR/runtime
ports:
- '10095:10095'
command: sh /run.sh
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
networks:
- ai_network
技术解析:
- 使用FunASR框架,这是一个高效的语音识别解决方案
- 配置了特权模式和所有可用的GPU资源
- 工作目录设置为FunASR运行时目录,确保正确执行识别任务
- 通过10095端口提供服务
性能优化提示:
- 对于高并发场景,可以考虑部署多个ASR实例并配置负载均衡
- 监控GPU内存使用情况,必要时调整count参数限制GPU使用数量
4. 视频生成服务 (heygem-gen-video)
heygem-gen-video:
image: guiji2025/heygem.ai
container_name: heygem-gen-video
restart: always
runtime: nvidia
privileged: true
volumes:
- d:/heygem_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
技术解析:
- 使用项目主镜像heygem.ai,包含视频生成核心功能
- 配置了8GB共享内存(shm_size),这对视频处理非常重要
- 设置了PyTorch CUDA内存分配策略,优化GPU内存使用
- 数据卷映射用于持久化面部相关数据
- 通过8383端口提供服务
关键配置说明:
shm_size: '8g'
:视频生成通常需要大量内存交换,增加共享内存可显著提高性能PYTORCH_CUDA_ALLOC_CONF
:这个环境变量帮助避免CUDA内存碎片化问题
部署流程指南
-
环境准备:
- 确保已安装Docker和NVIDIA容器工具包
- 确认GPU驱动版本兼容CUDA版本
-
数据目录准备:
- 在D盘创建
heygem_data
目录结构 - 确保有足够的存储空间用于语音和视频数据
- 在D盘创建
-
服务启动:
docker-compose up -d
-
服务验证:
- 检查各容器日志确认无报错
- 通过各自端口测试API是否可用
常见问题解决方案
GPU资源冲突问题: 如果多个服务需要同时使用GPU,可以考虑:
- 使用NVIDIA_VISIBLE_DEVICES为不同服务分配不同GPU
- 调整deploy.resources.reservations配置限制各服务GPU使用量
内存不足问题:
- 视频生成服务可能需要更多共享内存,可适当增加shm_size
- 监控各服务内存使用,必要时增加物理内存或优化模型
性能调优建议:
- 为生产环境配置适当的资源限制(CPU/内存)
- 考虑使用docker-compose的scale参数横向扩展无状态服务
- 实现健康检查和自动恢复机制
架构设计思考
这个Docker Compose配置展示了微服务架构在AI项目中的应用:
- 服务解耦:TTS、ASR和视频生成作为独立服务,可以单独扩展和更新
- 资源隔离:每个服务可以独立配置GPU和内存资源
- 统一网络:通过ai_network实现服务间通信,同时保持外部访问可控
这种设计既保证了各AI组件的独立性,又通过Docker Compose实现了统一管理和部署,是AI服务容器化的典型实践。
通过本指南,开发者可以充分理解HeyGem.ai项目的服务架构和部署方式,根据实际需求进行调整和优化,构建稳定高效的AI服务环境。