使用 GitHub Actions 构建 CosyVoice 项目的运行环境镜像并推送到阿里云容器镜像服务和 GitHub Package Registry

news/2025/1/10 17:35:39/文章来源:https://www.cnblogs.com/aisong/p/18664386

使用 GitHub Actions 构建 CosyVoice 项目的运行环境镜像并推送到阿里云容器镜像服务和 GitHub Package Registry

概述

本文介绍了如何使用 GitHub Actions 构建 CosyVoice 项目的运行环境 Docker 镜像,并将其推送到阿里云容器镜像服务(ACR)和 GitHub Package Registry。通过挂载本地代码和模型的方式,运行时环境被独立打包为 Docker 镜像,便于分发和部署。这种方式使得项目的依赖和运行环境可控,并且可以在不同环境下保持一致性。

准备工作

1. 配置环境变量

在 GitHub 仓库的设置页面中,添加以下必要的环境变量:

  • ALIYUN_ACR_USERNAME: 登录阿里云容器镜像服务的用户名。
  • ALIYUN_ACR_PASSWORD: 登录阿里云容器镜像服务的密码。
  • ALIYUN_ACR_REGISTRY: 阿里云容器镜像服务的注册表 URL。
  • GHCR_USERNAME: GitHub Packages 的用户名。
  • GHCR_TOKEN: GitHub Packages 的个人访问令牌。
  • IMAGE_NAME: Docker 镜像名称。

这些信息可以通过 GitHub 仓库的 Settings -> Secrets and variables -> Secrets 页面添加。

2. 创建 Dockerfile

CosyVoice 项目中,使用 runtime/python/Dockerfile 文件,该文件定义了构建运行环境 Docker 镜像的指令。确保 Dockerfile 根据项目需求进行了正确配置,特别是镜像中的 Python 环境和依赖。

设置 GitHub Actions

1. 创建通用工作流模板文件

创建一个通用的 GitHub Actions 工作流模板,通过参数化配置使得同一份工作流文件适用于不同项目。对于 CosyVoice 项目,可以根据需求调整工作流中的参数和路径。

2. 编写工作流脚本
name: Build and Push CosyVoice Runtime Environment Docker Imageon:push:branches:- main # 触发推送的主要分支workflow_dispatch: # 允许手动触发工作流jobs:build:runs-on: ubuntu-latestenv:DOCKERFILE_PATH: ${{ github.event.inputs.dockerfile_path || 'runtime/python' }} # 默认路径IMAGE_TAG: ${{ github.sha }}steps:- name: Checkout the repositoryuses: actions/checkout@v3- name: Set up Docker Buildxuses: docker/setup-buildx-action@v2- name: Log in to GitHub Package Registryuses: docker/login-action@v2with:registry: ghcr.iousername: ${{ github.actor }}password: ${{ secrets.GITHUB_TOKEN }}- name: Log in to Aliyun ACRrun: echo "${{ secrets.ALIYUN_ACR_PASSWORD }}" | docker login --username=${{ secrets.ALIYUN_ACR_USERNAME }} --password-stdin ${{ secrets.ALIYUN_ACR_REGISTRY }}- name: Build and pushuses: docker/build-push-action@v3with:context: ${{ env.DOCKERFILE_PATH }}file: ${{ env.DOCKERFILE_PATH }}/Dockerfilepush: truetags: |${{ secrets.ALIYUN_ACR_REGISTRY }}/${{ github.repository }}:${{ env.IMAGE_TAG }}ghcr.io/${{ github.repository }}:${{ env.IMAGE_TAG }}

该工作流文件包含以下关键特性:

  • 参数化配置:通过输入参数指定 Dockerfile 的路径,默认为 runtime/python,从而使得该工作流能够适应不同项目的结构。
  • 手动触发选项:除了基于推送事件触发外,还提供了 workflow_dispatch 选项,使得用户可以手动触发工作流,便于进行测试或按需构建。

配置 Podman 命令

为了将本地代码和模型挂载到容器中并运行,可以使用以下 Podman 命令:

podman run -d \--name cosyvoice \--device=nvidia.com/gpu=all \-v ${LOCAL_PROJECT_PATH}:/opt/CosyVoice \-p 9233:9233 \${DOCKER_IMAGE}:${IMAGE_TAG} \/bin/bash -c "cd /opt/CosyVoice && python3 api.py"

其中:

  • ${LOCAL_PROJECT_PATH} 是本地项目的路径,可以设置为环境变量。
  • ${DOCKER_IMAGE} 是推送到注册表的镜像名称。
  • ${IMAGE_TAG} 是镜像标签,通常为构建哈希值 ${{ github.sha }}

请确保系统已安装 NVIDIA Container Toolkit,并正确配置本地环境,以支持 Podman 与 NVIDIA GPU 的交互。

未解决的问题

目前,在使用 podman compose 运行容器时,无法通过该方式使用宿主机的 GPU。这是一个已知问题,正在寻找解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/867237.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter进阶(6):详解 Key

一、Key是什么? 用官方的说法就是:Key 是 Widget、Element 和 SemanticNodes 的唯一标识符。 组件在更新的时候,其状态的保存主要是通过判断组件的类型或者 key 值是否一致。因此,当各组件的类型不同的时候,类型已经足够用来区分不同的组件了,此时我们可以不必使用 key。…

数据的涟漪效应:实时数据赋能保险资产管理,打造数字化、信息化、智能化的保险新业态

本期内容以保险公司的具体案例为切入点,探讨数字化技术如何助力保险资产管理行业应对数据管理的挑战并实现创新突破。使用 TapData,化繁为简,摆脱手动搭建、维护数据管道的诸多烦扰,轻量替代 OGG, Kettle 等同步工具,以及基于 Kafka 的 ETL 解决方案,「CDC + 流处理 + 数…

KingbaseES RAC在线扩容案例

KingbaseES、KingbaseES RAC案例说明: KingbaseES RAC在两节点的基础上,执行在线扩容为3节点。 集群版本: test=# select version();version ---------------------KingbaseES V008R006 (1 row)集群架构:操作系统: [root@node210 KingbaseHA]# cat /etc/os-release NAME=&…

Xinference:企业级大模型推理和部署平台

导读 近年来,大语言模型(LLM,后简称大模型)的发展突飞猛进。本文将分享未来速度公司在开源领域以及大模型落地过程中的核心产品——Xinference,其定位是一个真正企业级的、严肃的大模型推理和部署平台。公司致力于在 LLMOps(大模型运维)过程中,帮助大家降低部署的成本和…

【Java开发】面对一个访问量比较高的API,我们应该如何去应对突然暴涨的流量呢?

一、流量管理与限流 1. 流量限制和速率限制: 例如,当请求频率超过预设阈值时,系统可以自动限制或拒绝额外的请求,从而保护后端服务免受过多请求的影响。 通过API网关或负载均衡器进行配置,以控制每个用户或IP的请求速率。 2. 使用限流算法: 令牌桶算法:适合应对瞬时突发…

高效团队协作:在线工具在酒店管理中的实践

1. 酒店运营的复杂性与信息管理的挑战 酒店行业是一个高度复杂和依赖信息的行业。从前台接待到客房服务,从市场营销到财务管理,每个环节都需要精准的数据对接与高效的沟通。然而,在传统管理模式下,信息传递通常依赖于邮件、电话或线下会议,不仅效率低下,还容易导致信息遗…

Centos7 离线安装nginx教程

步骤一:安装nginx三个依赖openssl 、pcre、zlib pcre:https://sourceforge.net/projects/pcre/files/pcre/8.45/(版本:pcre-8.45.tar.gz)zlib:http://www.zlib.net/(版本:zlib-1.2.13.tar.gz)oppenssl:https://www.openssl.org/source/(版本:openssl-1.1.0h.tar.gz…

JS-27 字符串方法_split()

split方法按照给定规则分割字符串,返回一个由分割出来的子字符串组成的数组 it|sxt|zifuchuan.split(|)//["it","sxt","zifuchuan"] 如果分割规则为空字符串,则返回数组的成员是原字符串的每一个字符。 a|b|c.split()//["a","|…

找不到 .NETFramework,Version=v4.0 的引用程序集问题

高版本操作系统默认安装.NETFramework4.6或以上时,系统用4.0的msbuild 命令编译导致 找不到4.0的程序集问题 1.下载nuget版本的资源包 https://www.nuget.org/packages/Microsoft.NETFramework.ReferenceAssemblies.net40/ microsoft.netframework.referenceassemblies.net40.…

嵌入式截屏工具-gsnap移植 arm平台

# 目录 - [前言](#前言) - [正文](#正文)- [原理](#原理)- [环境](#环境)- [详细流程](#详细流程)- [使用](#使用) - [参考](#参考)# 正文 ## 原理 ### 前提条件: 嵌入式机器要支持`/dev/fb0`这个设备节点。不然,这个工具基本就使用不了了。### 原理: 由于 Linux 系统的 Frame…

AIME2019 I

AIME2019 I 的题目订正。√√√√ √√.√√ ...√. \(= 9\) https://artofproblemsolving.com/wiki/index.php/2019_AIME_I_Problems P4 寄啦! 唐题。分讨 substitution 的次数即可。 P5 对啦! DP。 令 \(f_{x,y}\) 为走到 \((x,y)\) 的概率。边界情况为 \(f_{4,4} = 1\)。答…

通过本地私有的镜像仓库harbor解决网络原因导致的jdk无法加载而造成的docker打包错误.v2.250110

​各种网络原因,或是docker.io无法访问,或是阿里的镜像源故障,导致java打包发布的时候报错,很影响代码发布的质量。解决思路:墙出去把jdk下载下来,代码使用本地的harbor库进行引用,一劳永逸。此解决方法也适用于国外优质不频繁变动的镜像源的本地化使用。解决方法 1. 自…