前置条件说明
官网推荐服务端和客户端都在windows进行部署,本次把服务端部署到linux,客户端在windows环境。需要做一些改造。
部署架构图
image-20250319125219461.png
由于官方采用windows部署时,相关视频和音频的存储是客户端和服务端一起共享的,要解决存储一致的问题就需要通过NFS文件共享实现数据同步和一致性。
linux部署服务端
networks:
ai_network:
driver: bridge
services:
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:
- ./heygem_data/heygem_data/voice/data:/code/data #./heygem_data/heygem_data/ 需要作为nfs的共享目录
command: /bin/bash -c "/opt/conda/envs/python310/bin/python3 tools/api_server.py --listen 0.0.0.0:8080"
networks:
- ai_network
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
heygem-f2f:
image: guiji2025/heygem.ai
container_name: heygem-f2f
restart: always
runtime: nvidia
privileged: true
volumes:
- ./heygem_data/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
linux 配置NFS
软件安装省略,自行搜索
(base) [root@docker-243 HeyGem]# cat /etc/exports
/appdata/tengyun/HeyGem/heygem_data *(rw,sync)
windows 配置NFS挂在
image-20250319130219017.png
映射网络驱动器
image-20250319130353672.png
客户端部署
克隆https://github.com/GuijiAI/HeyGem.ai.git 代码
- 修改配置文件src\main\config\config.js
export const serviceUrl = {
face2face: isDev ? 'http://192.168.101.243:8383/easy' : 'http://192.168.101.243:8383/easy',
tts: isDev ? 'http://192.168.101.243:18180' : 'http://192.168.101.243:18180'
}
192.168.101.243 为linux服务端的ip地址
- 修改音视频存储的路径为NFS挂在的客户端
export const assetPath = {
model: path.join('F:','heygem_data', 'face2face', 'temp'), // 模特视频
ttsProduct: path.join('F:','heygem_data', 'face2face', 'temp'), // TTS 产物
ttsRoot: path.join('F:','heygem_data', 'voice', 'data'), // TTS服务根目录
ttsTrain: path.join('F:','heygem_data', 'voice', 'data','origin_audio') // TTS 训练产物
}
F:是网络驱动器的路径,根据自己设置的进行配置
- 重新打包编译客户端
npm run build:win
运行效果
image-20250319130623635.png
image-20250319130639757.png
image-20250319130713303.png