04-19 周四 GitHub CI 方案设计

04-19 周四 GitHub CI 方案设计
时间版本修改人描述
2024年4月19日14:44:23V0.1宋全恒新建文档
2024年4月19日17:22:57V1.0宋全恒完成部署拓扑结构的绘制和文档撰写

简介

需求

 由于团队最近把代码托管在GitHub上,为解决推理、应用的自动化CI的需要,调研了GitHub自带的CI基础设施,基本上需要满足如下的需求:

  • 由于大模型需要GPU,因此CI时需要使用GPU来运行,由于一台服务器有多个GPU卡,因此,保证灵活性的同时,需要为每个仓库的CI程序自定义需要的GPU。
  • 部署简单,能够实现一台服务器,如8C A100的,同时对4个仓库进行CI作业的运行,而不互相影响。

 关联的文档如下所示:

  • 04-15 周一 GitHub仓库CI服务器配置过程与workflow配置文件解析文档.md
  • 04-18 周四 为LLM_inference项目配置GitHub CI过程记录.md

仓库

 当前的仓库主要是为了如下的项目而设置。

 GitHub仓库主要是包括四个私有仓库

仓库项目简介标签分配GPU分配
LLMChat主要是大模型RAG,解决大模型知识时效问题A100, gpu, application3,4
LLMs_Inference主要是依托于vLLM,解决高效推理问题gpu, a100, inference7号A100

注,由于大模型精调和训练组当前还不需要CI,因此未对其进行配置CI。

方案设计

GitHub actions Runner

 GitHub Actions Runner 是 GitHub Actions 的一部分,它允许你在自己的硬件、虚拟机或云实例上托管和运行自定义的工作流程。Runner 可以与 GitHub 上的仓库关联,以便在触发事件(如 push、pull request 等)发生时执行工作流程中的任务。

img

以下是 GitHub Actions Runner 的一些重要特点和功能:

  1. 灵活性: 可以在自己的环境中托管 Runner,这意味着你可以在自己的硬件、虚拟机或云实例上运行工作流程。这为你提供了更大的灵活性和控制权,以满足特定的需求和安全要求。
  2. 跨平台支持: Runner 支持多种操作系统和平台,包括 Windows、Linux 和 macOS。这意味着你可以在不同的操作系统上运行工作流程,并且可以根据需要选择合适的平台。
  3. 自动化: Runner 可以自动更新到最新版本,并且可以自动重新连接到 GitHub 服务器以接收新的工作。这简化了 Runner 的管理和维护,并确保了其与 GitHub 平台的兼容性。
  4. 安全性: Runner 可以配置为在受限的环境中运行,以确保工作流程中的敏感数据和操作受到保护。此外,Runner 还支持身份验证和令牌以与 GitHub 服务器进行安全通信。
  5. 自定义性: 你可以自定义 Runner 的配置和行为,以满足特定的需求。例如,你可以配置 Runner 的标签以限制工作流程在特定 Runner 上运行,也可以配置 Runner 的执行器以添加额外的功能和工具。
image-20240419164838227

总的来说,GitHub Actions Runner 提供了一个灵活、强大和可扩展的平台,用于在你自己的环境中托管和运行 GitHub Actions 工作流程,从而实现自动化和持续集成/持续部署 (CI/CD)。

注,由于需要使用GPU完成大模型相关的作业,测试,因此无法使用GitHub提供的GitHub-hosted runner,主要是部署self-hosted runner。

 GitHub actions-runner 也为托管在GitHub上的仓库,仓库地址,在使用时,采用Client-Server的方式进行作业的分发和处理。

CI服务器

 当前用于CI的是包含8张A100卡的42服务器,其操作系统细节如下:

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

注,由于当前的宿主机为Ubuntu 20.04,因此在CI时在使用自定义的镜像启动容器进行单元测试等工作时,强烈建议采用Ubuntu 20.04的Pytorch镜像,以防止出现类似GLIBC的问题。

注,建议在镜像中,不要再次使用conda进行环境管理。

部署拓扑

 为满足多个仓库在同一台服务器使用GPU进行CI作业的需求,因此,我们需要部署多个actions-runner实例与github server进行交互,具体的部署结果如下图所示:

 经过调研,采用的是多用户多个actions-runner实例的部署,具体如下图所示:

image-20240419165854790

注,在使用多actions-runner实例时,尝试过了如下的方案:

  • 在42服务器上采用虚拟化,即Docker容器中包含actions-runner服务,可以注册但执行CI会报错。
  • 在42服务器上,采用单用户部署多个实例(部署更加简单),但直接报错,无法配置。

 Docker中包含actions-runner,报错,Docker in Docker这个特征当前还不支持。

image-20240419170505655

 单用户部署多个actions-runner实例,报错:

image-20240419170641421

 所以,最终选择了为每个仓库新建一个用户,在该用户的目录下运行该实例。

GPU资源限额

CI解释

 由于在运行actions-runner实例,并没有划分GPU,即确定在作业分发时使用的GPU,这部分工作,是由self-hosted Runner的在容器中运行作业来指定的。也就是在不同的仓库执行CI作业时,有各自的CI工作流要执行:

image-20240419171510590

 这些工作流是由workflow的配置文件定义的,即.github/workflows/*.yaml定义的。

 换句话说,即使用那个镜像启动容器,以什么方式启动容器,在容器中执行那些过程,都是由这个配置文件决定的。

使用7号gpu卡进行CI作业的工作流配置文件

# This workflow will install Python dependencies, run tests and lint with a single version of Python
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-pythonname: LLM_Inference CIon:push:branches: [ "features-ci-songquanheng" ]pull_request:branches: [ "main" ]permissions:contents: readjobs:llm-inference-ci:runs-on: [self-hosted, linux, x64, a100, inference]defaults:run:shell: bash -l {0}container:image: nvcr.io/nvidia/pytorch:22.12-py3options: --runtime nvidia --shm-size=32gbcredentials:username: adminpassword: admin@ZJ2023env: NVIDIA_VISIBLE_DEVICES: 7volumes:- /home/yangfei/:/home/yangfeiports:- 22steps:    - name: show pyhon versionrun: |python --version- name: show the gpus availablerun: |nvidia-smi- name: install necessary pip dependencies run: |pip install vllm --index-url https://pypi.tuna.tsinghua.edu.cn/simple- name: Test with pytest and generate coverage report run: |pytest --cov=tests --cov-report=xml- name: Upload coverage reports to Codecovuses: codecov/codecov-action@v4with:token: ${{ secrets.CODECOV_TOKEN }}file: coverage.xmlverbose: true

 上述配置文件限定了为ci容器使用的gpu资源。具体关于该配置文件的解析,可以参见

  • [04-15 周一 GitHub仓库CI服务器配置过程与workflow配置文件解析文档.md](D:\400-工作\440-中心\443-高效能计算中心\04-15 周一 GitHub仓库CI服务器配置过程与workflow配置文件解析文档.md)

    不再赘述

总结

 本文主要描述了在42服务器上为多个仓库部署actions-runner实例的CI 部署方案,具体包含如下内容:

  • 42CI服务器的详情
  • 团队代码仓库的标签划分
  • 部署拓扑结构
  • GPU限定使用的实现。

 通过这样的部署方式,就可以灵活的为多个代码仓库的自动化CI实现各种自定义的功能,以满足特定的要求和实现。

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

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

相关文章

考虑需求响应的微网优化调度模型【粒子群算法】【matlab】

目录 1 主要内容 1.1 模型约束条件 1.2 粒子群算法优化过程 2 部分代码 3 效果图 4 下载链接 1 主要内容 该模型构建了考虑需求响应的微电网优化调度模型,并采用粒子群算法(PSO)进行优化求解,模型主体有储能、风电、光伏、微…

Linux编译内核模块生成.KO驱动示例

现在的Linux内核十分庞大,驱动繁多,但是仍有一些是内核所不包含的,或者我们前期进行了内核裁剪,但后面又需要添加一些驱动,但是又不想重新烧录内核,这时候就可以使用内核模块功能,对内核驱动进行…

动力电池热管理方案介绍与发展方向

摘要 随着电动汽车的快速发展,高性能的动力电池系统成为推动电动汽车产业发展的重要因素。然而,伴随着能量密度提高和放电深度增加,电池热管理问题逐渐凸显。良好的热管理方案能够提高电池的寿命,保障电池性能,延长电…

ASRPRO

https://gitee.com/gitee-128/ASR-PRO-U8G2/tree/main 不下载模型 语音就是天问51唤醒我 u8g2的移植过程 第一步 下载u8g2的源代码 第二步 修改 delay and 函数 第三步 添加头文件 显示 显示 动画 SPI I2C(SOFT SPI ;SOFT I2C U8G2 移植过程(移植过程参考…

外贸知识篇 | 免堆期和免箱期,一次分清楚!

免箱期和免堆期这两个期限 对于货代人或者货主来说都是十分重要的 一不留神就会产生额外的异常费用 但很多人还是有些傻傻分不清楚 今天我们就简单的聊下 一、深入解读免堆期 免堆期,英文称为Free Demurrage,是指在码头堆场或内陆堆场允许集装箱免…

图像处理-图像平滑

图像平滑 前言一、概念介绍1.1 图像的平滑1.2 图像中噪声的分类1.3 MATLAB的添加噪音代码 二、空间域平滑滤波2.1 均值滤波2.2 原理计算 总结 前言 在图像的获取、传输和存储过程常常收到各种噪声的干扰和影响,使得图像的质量下降,为了获得高质量的数字…

C语言—控制语句

控制语句就是用来实现对流程的选择、循环、转向和返回等控制行为。 分支语句 if语句 基本结构 if(表达式) { 语句块1; } else { 语句块2; } 执行顺序: 如果表达式判断成立(即表达式为真),则执行语句块…

2024测试员最佳跳槽频率是多少?进来看看你是不是符合!

最近笔者刷到一则消息,一位测试员在某乎上分享,从月薪5K到如今的20K,他总共跳了10次槽,其中还经历过两次劳动申诉,拿到了大几万的赔偿,被同事们称为“职场碰瓷人”。 虽说这种依靠跳槽式的挣钱法相当奇葩&…

【GameFi】链游 | Seraph | 区块链上的动作角色扮演 NFT 装备收集和掠夺游戏

官网下载 新赛季公告:https://www.seraph.game/#/news/357 开始时间:2024年4月19日 11:00 (UTC8) discard会有人发送一些激活码,或者有一些活动,只需要填表格关注账号,参与了就会将激活码发到你的邮箱 …

记一次动态规划的采坑之旅, 741摘樱桃 https://leetcode.cn/problems/cherry-pickup/description/

首次看题目时,发现是困难。立马想到了,动态规划。 再看题目, 摘樱桃,还要返回摘两次,求摘最多的樱桃。 大脑第一反应就是: 先使用动态规划,找到 0 0 到 n-1 n-1处走过的最大樱桃, 并…

okcc最新版本会被盗打吗?

OKCC是一款智能外呼系统,它提供了多种安全措施来防止系统被盗打。以下是一些关键的安全配置和管理措施: 立即挂失SIM卡:一旦发现OKCC系统被盗打,应立即联系运营商进行SIM卡的挂失,以阻止盗打者继续使用您的号码进行通信…

软件设计师-应用技术-数据流图题1

基础知识及技巧: 0. 概念: 在结构化分析中,数据流图用来记录系统中的数据和数据在特定的过程中的流动,即数据如何被采集、处理、保存和使用的(围绕信息系统的功能)。 1. 元素实例: 补充知识:** 外部实体…