首页 > 其他分享 >基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS

基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS

时间:2024-06-24 11:45:01浏览次数:29  
标签:ChatTTS Terraform command vpc ROS id alicloud

介绍

ChatTTS是专门为对话场景设计的文本转语音模型,例如LLM助手对话任务。它支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练。ChatTTS webUI & API 为 ChatTTS 提供了网页界面和API服务。

资源编排服务(Resource Orchestration Service, ROS)是阿里云提供基于基础设施即代码(Infrastructure as Code, IaC) 理念的自动化部署服务,我们可以通过定义一个 Terraform 模板,轻松部署一套云上的 ChatTTS 环境。

部署步骤

  1. 登录ROS控制台-ChatTTS部署页面
  2. 配置模板参数:选择 ECS 实例的可用区、实例类型等
  3. 点击【下一步】,然后【创建】。部署完成后,点击资源栈的输出,即可看到 ChatTTS 服务的地址。点击链接即可体验 ChatTTS 的功能。

⚠️说明:
由于服务首次启动会下载模型,需要等待2-5分钟后才能正常访问。
本示例使用 GitHub 镜像站点进行克隆,以避免网络问题。
ChatTTS 安装在 /opt/chat-tts-ui 下,日志文件为 app.log。

部署原理

我们可以看到通过 ROS 可以非常快捷地部署阿里云上的各种云资源(比如 alicloud_vpc、alicloud_vswitch、alicloud_instance 实例等)和应用程序(比如 ChatTTS)。如果想了解是如何做到的,那么可以阅读此章节。

  1. 编写 Terraform 模板。在如下模板中定义了:
  • resource:定义了 VPC、VSwitch、ECS 实例、安全组、安全组规则以及安装 ChatTTS 的命令执行。
  • variable:定义了常用的参数,比如可用区、ECS实例类型类型。
  • output:定义了自定义输出,比如 ChatTTS 服务的地址
variable "zone_id" {
  type        = string
  description = <<EOT
  {
    "AssociationProperty": "ALIYUN::ECS::Instance:ZoneId",
    "Label": {
        "zh-cn": "可用区ID"
    }
  }
  EOT
}

variable "instance_type" {
  type        = string
  description = <<EOT
  {
    "AssociationProperty": "ALIYUN::ECS::Instance::InstanceType",
    "AssociationPropertyMetadata": {
      "ZoneId": "$${zone_id}",
      "DefaultValueStrategy": "recent"
    },
    "Label": {
        "zh-cn": "实例类型"
    }
  }
  EOT
}

variable "system_disk_category" {
  type    = string
  description = <<EOT
  {
    "AssociationProperty": "ALIYUN::ECS::Disk::SystemDiskCategory",
    "AssociationPropertyMetadata": {
      "ZoneId": "$${zone_id}",
      "LocaleKey": "DiskCategory",
      "InstanceType": "$${instance_type}",
      "AutoSelectFirst": true,
      "AutoChangeType": false
    },
    "Label": {
        "zh-cn": "系统盘类型"
    }
  }
  EOT
}

variable "password" {
  type    = string
  description = <<EOT
  {
    "ConstraintDescription": {
      "en": "Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in).",
      "zh-cn": "长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)。"
    },
    "Description": {
      "en": "Server login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in).",
      "zh-cn": "服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)。"
    },
    "Default": null,
    "AllowedPattern": "[0-9A-Za-z\\_\\-\\&:;'<>,=%`~!@#\\(\\)\\$\\^\\*\\+\\|\\{\\}\\[\\]\\.\\?\\/]+$",
    "MinLength": 8,
    "MaxLength": 30,
    "NoEcho": true,
    "Label": {
        "zh-cn": "实例密码"
    }
  }
  EOT
}

resource "alicloud_vpc" "vpc" {
  vpc_name   = "game-vpc"
  cidr_block = "192.168.0.0/16"
}

resource "alicloud_vswitch" "vswitch" {
  vpc_id     = alicloud_vpc.vpc.id
  zone_id    = var.zone_id
  cidr_block = "192.168.0.0/24"
}


resource "alicloud_security_group" "group" {
  vpc_id = alicloud_vpc.vpc.id
}

resource "alicloud_security_group_rule" "rule" {
  type              = "ingress"
  ip_protocol       = "tcp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = "9966/9966"
  security_group_id = alicloud_security_group.group.id
  cidr_ip           = "0.0.0.0/0"
}

resource "alicloud_instance" "ecs" {
  availability_zone          = var.zone_id
  security_groups            = alicloud_security_group.group.*.id
  instance_type              = var.instance_type
  system_disk_category       = var.system_disk_category
  image_id                   = "ubuntu_22_04_x64_20G_alibase_20240530.vhd"
  instance_name              = "ChatTTS"
  vswitch_id                 = alicloud_vswitch.vswitch.id
  password                   = var.password
  internet_max_bandwidth_out = 1
}

locals {
  command         = <<EOF
#!/bin/bash
echo "#########################"
echo "# Install ChatTTS Web UI"
echo "#########################"
apt-get update
apt-get install -y python3-venv

git clone --depth 1 https://gitclone.com/github.com/jianchang512/ChatTTS-ui.git /opt/chat-tts-ui && cd /opt/chat-tts-ui
ret_code=$?
if [ $ret_code -ne 0 ]; then
  echo "Git clone https://gitclone.com/github.com/jianchang512/ChatTTS-ui.git failed. Exiting."
  exit $ret_code
fi

python3 -m venv venv
source ./venv/bin/activate
pip3 install -r requirements.txt
export WEB_ADDRESS=0.0.0.0:9966
nohup python3 app.py > app.log 2>&1 &
EOF
  base_64_command = base64encode(local.command)
}


resource "alicloud_ecs_command" "command" {
  name            = "game-command"
  command_content = local.base_64_command
  type            = "RunShellScript"
  timeout         = 1200
  working_dir     = "/root"
}

resource "alicloud_ecs_invocation" "default" {
  command_id  = alicloud_ecs_command.command.id
  instance_id = [alicloud_instance.ecs.id]
  timeouts {
    create = "1200s"
  }
}

output "ChatTTS_URL" {
  value = format("http://%s:9966", alicloud_instance.ecs.public_ip)
}
  1. 在 ROS 控制台中使用此模板创建资源栈。ROS 提供的 Terraform 托管服务会自动解析出模板中资源的依赖关系,按照资源依赖顺序创建云资源。如果资源间没有依赖,则会并发创建,从而提升部署效率。ROS 会把这次创建的所有资源存放到一个“资源栈”中,后续可以方便地管理这组资源集合。比如:
  • 将新模板应用到这个“资源栈”中,从而更新里面的资源。
  • 删除这个“资源栈”,从而把所有的资源删掉。

总结

基于 IaC 的理念,通过定义一个模板,使用 ROS 提供的 Terraform 托管服务进行自动化部署,可以非常高效快捷地部署任意云资源和应用(比如 ChatTTS 服务)。相比于手动部署或者通过 API、SDK 的部署方式,有着高效、稳定等诸多优势,也是服务上云的最佳实践。

标签:ChatTTS,Terraform,command,vpc,ROS,id,alicloud
From: https://www.cnblogs.com/alicloudros/p/18264683

相关文章

  • cross attention的源码实现,并代码详细讲解
     importnumpyasnpdefsoftmax(x,axis=-1):"""Softmax函数,用于计算注意力权重"""e_x=np.exp(x-np.max(x,axis=axis,keepdims=True))returne_x/e_x.sum(axis=axis,keepdims=True)defscaled_dot_product_attention(q,k......
  • MySQL入门学习-连接查询.CROSS JOIN
        CROSSJOIN(交叉连接):返回左表中的所有行,左表中的每一行与右表中的所有行组合,返回的行数等于左表行数乘以右表行数。一、连接查询包括:1.CROSSJOIN(交叉连接):返回左表中的所有行,左表中的每一行与右表中的所有行组合。2.INNERJOIN(内连接):返回左表和右表......
  • CrossOver 24 for Mac(windows 虚拟机)
    CrossOverforMac是一款功能强大的虚拟机软件,允许在Mac系统上运行Windows应用程序而无需重新启动计算机。通过CrossOver,用户可以轻松地运行Windows软件和游戏,而无需购买Windows许可证或使用虚拟机。CrossOver通过直接在Mac系统上提供所需的Windows资源,实现了无缝的跨平台兼容......
  • [转]学习指南 - 考试 PL-400:Microsoft Power Platform 开发人员
    StudyguideforExamPL-400:MicrosoftPowerPlatformDeveloper学习指南-考试PL-400:MicrosoftPowerPlatform开发人员|MicrosoftLearn自2024年6月20日起测试的技能受众概况此考试的考生应该会设计、开发、测试使用MicrosoftPowerPlatform扩展点的解......
  • 探索ChatTTS项目:高效的文字转语音解决方案
    文章目录......
  • 麒麟系统通过CrossOver软件安装Windows软件(.exe)的详细过程
    一、前期准备1.成功安装麒麟系统(本次实验的安装的系统是:Kylin-Desktop-V10-SP1))2.麒麟系统已经成功安装CrossOver软件3.Windows软件包(.exe文件)已经完成拷贝至麒麟系统4.知晓登录账户密码二、操作步骤选中需要安装的.exe软件,然后点击鼠标右键,然后选中打开方式,然......
  • ros2bag_convert 使用记录 | ros2 bag 转csv格式
    fishrosyyds:GitHub-fishros/ros2bag_convert:ConvertROS2bagfilestoCSV,JSON,etc.需要把ros2bag记录的机械臂关节信息读出来,再发送给机械臂重复记录的动作。现在要先转换成csv格式,记录一下。1.转到你的工作环境里,在该环境安装(我没有用sudo,因为只想装在某个cond......
  • HKCU\Environment\UserInitMprLogonScript;HKLM\Software\Microsoft\Windows NT
    HKCU\Environment\UserInitMprLogonScript: 这个键位于HKEY_CURRENT_USER(HKCU)的Environment分支下,它用于存储与当前用户环境相关的设置。UserInitMprLogonScript 键可能被设置为在用户登录时运行一个脚本或程序。这个脚本通常用于配置用户特定的环境设置或执行一些登录......
  • ICEE-Power-SCR-OptoisolaterDriver-MOC Series-MOC3081/2/3: 6-Pin DIP Zero-Cross T
    EnglishWords:SCR:双向可控硅Traic:单向可控硅找Datasheet的好去处:DigiKey,Mouser,Arrow三家全球最大的电子元器件采购平台,搜索到的元器件页面会有Datasheet可供下载。https://www.digikey.com/en/products/detail/onsemi/MOC3083M/281240https://www.mouser.com/datas......
  • 使用Microsoft.SemanticKernel基于本地运行的Ollama大语言模型实现Agent调用函数
    大语言模型的发展日新月异,记得在去年这个时候,函数调用还是gpt-4的专属。到今年本地运行的大模型无论是推理能力还是文本的输出质量都已经非常接近gpt-4了。而在去年gpt-4尚未发布函数调用时,智能体框架的开发者们依赖构建精巧的提示词实现了gpt-3.5的函数调用。目前在本机运行的大......