ChatTTS是专门为对话场景设计的文本转语音模型,例如LLM助手对话任务。它支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练。ChatTTS webUI & API 为 ChatTTS 提供了网页界面和API服务。
资源编排服务(Resource Orchestration Service, ROS)是阿里云提供基于基础设施即代码(Infrastructure as Code, IaC) 理念的自动化部署服务,我们可以通过定义一个 JSON/YAML/Terraform
模板,轻松部署一套云上的 ChatTTS 环境。
部署步骤
- 登录ROS 控制台-ChatTTS 部署页面
- 配置模板参数:选择 ECS 实例的可用区、实例类型等
- 点击【下一步】,然后【创建】。部署完成后,点击资源栈的输出,即可看到 ChatTTS 服务的地址。点击链接即可体验 ChatTTS 的功能。
⚠️说明:
- 由于服务首次启动会下载模型,需要等待2-5分钟后才能正常访问。
- 本示例使用 GitHub 镜像站点进行克隆,以避免网络问题。
- ChatTTS 安装在
/opt/chat-tts-ui
下,日志文件为app.log
。
部署原理
我们可以看到通过 ROS 可以非常快捷地部署阿里云上的各种云资源(比如 VPC、VSwitch、ECS 实例等)和应用程序(比如 ChatTTS)。如果想了解是如何做到的,那么可以阅读此章节。
- 编写 ROS 模板。在如下模板中定义了:
Resources
:定义了 VPC、VSwitch、ECS 实例、安全组、安全组规则以及安装 ChatTTS 的命令。Parameters
:定义了常用的参数,比如可用区、ECS实例类型类型。Outputs
:定义了自定义输出,比如 ChatTTS 服务的地址。
ROSTemplateFormatVersion: '2015-09-01'
Description:en: Build text-to-speech system ChatTTS on the ECS instance (Ubuntu 22.04).zh-cn: 在ECS实例(Ubuntu 22.04)上搭建文本转语音系统ChatTTS。
Parameters:ZoneId:Type: StringLabel:en: Availability Zonezh-cn: 可用区IDAssociationProperty: ALIYUN::ECS::Instance:ZoneIdInstanceType:Type: StringLabel:en: Instance Typezh-cn: 实例类型AssociationProperty: ALIYUN::ECS::Instance::InstanceTypeAssociationPropertyMetadata:ZoneId: ${ZoneId}DefaultValueStrategy: recentSystemDiskCategory:Type: StringLabel:en: System Disk Typezh-cn: 系统盘类型AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategoryAssociationPropertyMetadata:LocaleKey: DiskCategoryZoneId: ${ZoneId}InstanceType: ${InstanceType}AutoSelectFirst: trueAutoChangeType: falseDefault: cloud_essdInstancePassword:Type: StringLabel:en: Instance Passwordzh-cn: 实例密码Description:en: Server login password, Length 8-30, must contain three(Capital letters,lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbolin).zh-cn: 服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)。ConstraintDescription:en: Length 8-30, must contain three(Capital letters, lowercase letters, numbers,()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in).zh-cn: 长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)。AssociationPropertyMetadata:Visible:Condition:Fn::Equals:- ${SelectInstance}- falseDefault:AllowedPattern: '[0-9A-Za-z\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$'MinLength: 8MaxLength: 30NoEcho: true
Resources:Vpc:Type: ALIYUN::ECS::VPCProperties:CidrBlock: 192.168.0.0/16VSwitch:Type: ALIYUN::ECS::VSwitchProperties:ZoneId:Ref: ZoneIdVpcId:Ref: VpcCidrBlock: 192.168.0.0/24SecurityGroup:Type: ALIYUN::ECS::SecurityGroupProperties:VpcId:Ref: VpcSecurityGroupIngress_9966:Type: ALIYUN::ECS::SecurityGroupIngressProperties:SecurityGroupId:Ref: SecurityGroupSourceCidrIp: 0.0.0.0/0IpProtocol: tcpNicType: intranetPortRange: 9966/9966InstanceGroup:Type: ALIYUN::ECS::InstanceGroupProperties:VpcId:Ref: VpcVSwitchId:Ref: VSwitchSecurityGroupId:Ref: SecurityGroupImageId: ubuntu_22_04InstanceName: ChatTTSInstanceType:Ref: InstanceTypeSystemDiskCategory:Ref: SystemDiskCategoryPassword:Ref: InstancePasswordIoOptimized: optimizedMaxAmount: 1DS_Instances:Type: DATASOURCE::ECS::InstancesProperties:InstanceIds:Fn::GetAtt:- InstanceGroup- InstanceIdsInstallChatTTS:Type: ALIYUN::ECS::RunCommandProperties:InstanceIds:Fn::GetAtt:- InstanceGroup- InstanceIdsType: RunShellScriptSync: trueTimeout: 1800CommandContent: |#!/bin/bashecho "#########################"echo "# Install ChatTTS Web UI"echo "#########################"apt-get updateapt-get install -y python3-venvgit clone --depth 1 https://gitclone.com/github.com/jianchang512/ChatTTS-ui.git /opt/chat-tts-ui && cd /opt/chat-tts-uiret_code=$?if [ $ret_code -ne 0 ]; thenecho "Git clone https://gitclone.com/github.com/jianchang512/ChatTTS-ui.git failed. Exiting."exit $ret_codefipython3 -m venv venvsource ./venv/bin/activatepip3 install -r requirements.txtexport WEB_ADDRESS=0.0.0.0:9966nohup python3 app.py > app.log 2>&1 &
Outputs:ChatTTSUrl:Description: ChatTTS default address.Value:Fn::Sub:- http://${IP}:9966- IP:Fn::Jq:- First- if .[0].PublicIpAddress != [] then .[0].PublicIpAddress[0] else .[0].EipAddress.IpAddressend- Fn::GetAtt:- DS_Instances- Instances
Metadata:ALIYUN::ROS::Interface:TemplateTags:- acs:example:AI:在ECS实例(Ubuntu 22.04)上搭建文本转语音系统ChatTTS
- 在 ROS 控制台中使用此模板创建资源栈。ROS 会自动解析出模板中资源的依赖关系,按照资源依赖顺序创建云资源。如果资源间没有依赖,则会并发创建,从而提升部署效率。ROS 会把这次创建的所有资源存放到一个“资源栈”中,后续可以方便地管理这组资源集合。比如:
- 将新模板应用到这个“资源栈”中,从而更新里面的资源。
- 删除这个“资源栈”,从而把所有的资源删掉。
总结
基于 IaC 的理念,通过定义一个模板,使用 ROS 进行自动化部署,可以非常高效快捷地部署任意云资源和应用(比如 ChatTTS 服务)。相比于手动部署或者通过 API、SDK 的部署方式,有着高效、稳定等诸多优势,也是服务上云的最佳实践。