04-19 周四 GitHub CI 方案设计
时间 | 版本 | 修改人 | 描述 |
---|---|---|---|
2024年4月19日14:44:23 | V0.1 | 宋全恒 | 新建文档 |
2024年4月19日17:22:57 | V1.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, application | 3,4 |
LLMs_Inference | 主要是依托于vLLM,解决高效推理问题 | gpu, a100, inference | 7号A100 |
注,由于大模型精调和训练组当前还不需要CI,因此未对其进行配置CI。
方案设计
GitHub actions Runner
GitHub Actions Runner 是 GitHub Actions 的一部分,它允许你在自己的硬件、虚拟机或云实例上托管和运行自定义的工作流程。Runner 可以与 GitHub 上的仓库关联,以便在触发事件(如 push、pull request 等)发生时执行工作流程中的任务。
以下是 GitHub Actions Runner 的一些重要特点和功能:
- 灵活性: 可以在自己的环境中托管 Runner,这意味着你可以在自己的硬件、虚拟机或云实例上运行工作流程。这为你提供了更大的灵活性和控制权,以满足特定的需求和安全要求。
- 跨平台支持: Runner 支持多种操作系统和平台,包括 Windows、Linux 和 macOS。这意味着你可以在不同的操作系统上运行工作流程,并且可以根据需要选择合适的平台。
- 自动化: Runner 可以自动更新到最新版本,并且可以自动重新连接到 GitHub 服务器以接收新的工作。这简化了 Runner 的管理和维护,并确保了其与 GitHub 平台的兼容性。
- 安全性: Runner 可以配置为在受限的环境中运行,以确保工作流程中的敏感数据和操作受到保护。此外,Runner 还支持身份验证和令牌以与 GitHub 服务器进行安全通信。
- 自定义性: 你可以自定义 Runner 的配置和行为,以满足特定的需求。例如,你可以配置 Runner 的标签以限制工作流程在特定 Runner 上运行,也可以配置 Runner 的执行器以添加额外的功能和工具。
总的来说,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实例的部署,具体如下图所示:
注,在使用多actions-runner实例时,尝试过了如下的方案:
- 在42服务器上采用虚拟化,即Docker容器中包含actions-runner服务,可以注册但执行CI会报错。
- 在42服务器上,采用单用户部署多个实例(部署更加简单),但直接报错,无法配置。
Docker中包含actions-runner,报错,Docker in Docker这个特征当前还不支持。
单用户部署多个actions-runner实例,报错:
所以,最终选择了为每个仓库新建一个用户,在该用户的目录下运行该实例。
GPU资源限额
CI解释
由于在运行actions-runner实例,并没有划分GPU,即确定在作业分发时使用的GPU,这部分工作,是由self-hosted Runner的在容器中运行作业来指定的。也就是在不同的仓库执行CI作业时,有各自的CI工作流要执行:
这些工作流是由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实现各种自定义的功能,以满足特定的要求和实现。
相关文章:
04-19 周四 GitHub CI 方案设计
04-19 周四 GitHub CI 方案设计 时间版本修改人描述2024年4月19日14:44:23V0.1宋全恒新建文档2024年4月19日17:22:57V1.0宋全恒完成部署拓扑结构的绘制和文档撰写 简介 需求 由于团队最近把代码托管在GitHub上,为解决推理、应用的自动化CI的需要,调研了…...
java日常选择题
题目来自牛客网 1.以下哪个接口的定义是正确的?() A interface B { void print() {} ;} B interface B { static void print();} C.abstract interface B extends A1, A2 //A1、A2为已定义的接口 {abstract void print(){};} D.interface B { void print(); 选D,因…...
安卓串口通訊三
核心代碼如下: package com.example.comandroid;import static android.content.ContentValues.TAG;import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView;import…...
嵌入式交叉编译:Unable to find arm_neon.h
找到文件 搜索了一下,具体目录是: /opt/linux/x86-arm/aarch64-mix210-linux/lib/gcc/aarch64-linux-gnu/7.3.0/include/arm_neon.h 解决办法 INC_ARM/opt/linux/x86-arm/aarch64-mix210-linux/lib/gcc/aarch64-linux-gnu/7.3.0/include./configure …...
Linux下工具tc详细讲解及限制IP和端口实例
首先纠正某一篇博客,TC并不是只管发包不管收包,之前我也很纳闷 知道最后看到了14年前一位大佬的帖子。是ingress! 这里有个非常重要的点就是ingress,如果父类不是他的话是完不成限制源IP的,这个关键词表明你正在添加一个入口队列规…...
Java | Leetcode Java题解之第73题矩阵置零
题目: 题解: class Solution {public void setZeroes(int[][] matrix) {int m matrix.length, n matrix[0].length;boolean flagCol0 false;for (int i 0; i < m; i) {if (matrix[i][0] 0) {flagCol0 true;}for (int j 1; j < n; j) {if (…...
MySQL#MySql表的操作
目录 一、创建表 二、查看表结构 三、修改表 1.修改表的名字 2.新增一个列 3.修改列 4.删除列 5.修改列的名称 四、删除表 一、创建表 语法: CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校…...
git修改版本发布时间
一、场景 发现git版本发布时,服务器时间有误,需要修改。 二、解决 (1)准备 时间戳转换网址:http://shijianchuo.wiicha.com/ (2)SQLite 数据库 连接到安装git的服务器,修改版本表…...
【NodeMCU实时天气时钟温湿度项目 1】连接点亮SPI-TFT屏幕和UI布局设计
前言 从今天开始,我们详解介绍制作实时天气时钟项目的方法步骤,主要分以下几个专题分别进行:(1)连接点亮SPI-TFT屏幕和UI布局设计;(2)NodeMCU的WIFI模式设置及连接;&…...
国内首发 | CSA大中华区启动《AI安全产业图谱(2024)》调研
在人工智能(AI)技术的快速发展浪潮中,AI安全已成为全球关注的焦点。为应对AI安全带来的挑战,确保AI技术的健康发展,全球范围内的研究机构、企业和技术社区都在积极探索解决方案。 在这一背景下,CSA大中华区…...
web页面与原生android通信,调用原生android方法
注册初始化方法JsBridge //JS注册事件监听 function connectWebViewJavascriptBridge(callback) {if (window.WebViewJavascriptBridge) {callback(WebViewJavascriptBridge)} else {document.addEventListener(WebViewJavascriptBridgeReady,function() {callback(WebViewJav…...
Linux的编译器
程序编译的过程 程序的编译过程是将源代码转换为可执行文件的一系列步骤。这个过程涉及多个阶段,主要包括预处理、编译、汇编和链接。下面详细介绍每个阶段: 1. 预处理(Preprocessing) 在实际编译之前,源代码文件首…...
redis--安装
简介 官网:RedisInsight - The Best Redis GUI 各个版本官网下载地址:http://download.redis.io/releases/ Redis和Memcached是非关系型数据库也称为NoSQL数据库,MySQL、Mariadb、SQL Server、PostgreSQL Oracle 数据库属于关系型数据 应用…...
魔法程序员的奥妙指南:Java基本语法
作为一名魔法程序员,精通Java语言是至关重要的。Java作为一种强大的编程语言,在编写优质代码和开发强大应用程序时发挥着重要作用。让我们深入探讨Java基本语法的关键要点,从注释到变量,无所不包! Java基本语法的神秘魔…...
SpringMVC传递参数
1.RequestMapping RequestMapping本身可以处理,get或post,指定了get或post之后,就只能处理对应的请求。 RequestMapping(value{"haihiyo","goodMoring"},methodRequestMethod.POST)2.RestFul风格 RestFul是一种风格 比如:网站的访…...
【Scala---04】函数式编程 『 函数 vs 方法 | 函数至简原则 | 函数式编程』
文章目录 1. 函数 vs 方法1.1 方法(1) 定义方法(2) 运算符即方法 1.2 函数(1) 定义函数(2) 匿名函数 1.3 方法转为函数1.4 可变参数&默认参数 2. 函数至简原则3. 函数式编程3.1 函数式编程思想3.3 函数柯里化&闭包3.5 递归 & 尾递归 4. 补充4.1 访问元祖元素4.2 &g…...
[华为OD] B卷 树状结构查询 200
题目: 通常使用多行的节点、父节点表示一棵树,比如 西安 陕西 陕西 中国 江西 中国 中国 亚洲 泰国 亚洲 输入一个节点之后,请打印出来树中他的所有下层节点 输入描述 第一行输入行数,下面是多行数据,每行以空…...
基于机器学习的学生学习行为自主评价设计与实现
管理员功能: a)学生学习数据管理:可查看学生学习的详情,编辑学生学习的内容,删除和添加学生学习,设置学生学习库存。 b)角色管理:增加删除学生用户,分配学生用户权限,查看学生用户…...
toml与json联系对比
前言 本文简单介绍toml;并且和json转化做对比,以及我对toml设计的理解。 参考: TOML: 简体中文 v1.0.0 json和toml转化工具 在线JSON转toml-toml转JSON - bejson在线工具 正文 数组 说白了,就是一个变量名,有多个…...
(已解决)org.springframework.amqp.rabbit.support.ListenerExecutionFailedException
报错截图 解决方案 1、登录rabbitMQ网址,删除所有队列 2、重启rabbitMQ 亲测有效!!!亲测有效!!!亲测有效!!!...
基于FPGA的数字信号处理(9)--定点数据的两种溢出处理模式:饱和(Saturate)和绕回(Wrap)
1、前言 在逻辑设计中,为了保证运算结果的正确性,常常需要对结果的位宽进行扩展。比如2个3bits的无符号数相加,只有将结果设定为4bits,才能保证结果一定是正确的。不然,某些情况如77 14(1110),如果结果只…...
基于STM32的宠物箱温度湿度监控系统毕业设计
基于STM32的宠物箱温度湿度监控系统毕业设计 一、项目背景与意义 随着人们生活水平的提高,养宠物已经成为一种流行趋势。然而,对于宠物的居住环境,尤其是温度与湿度的控制,是确保宠物健康的关键。本项目旨在设计一款基于STM32微…...
Linux sudo 指令
sudo命令 概念: sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,su等。这样不仅减少了root用户的登录和管理时间,同样也提高…...
【NumPy数组】:深入了解numpy.linspace()函数
一、numpy.linspace()函数的原理 numpy.linspace()函数的核心原理是在指定的起始值和终止值之间,按照给定的元素个数,生成等间隔的数值序列。与numpy.arange()函数不同,numpy.linspace()生成的是等间隔的数值,而不是等差的数值&a…...
计算机网络实验二:交换机的基本配置与操作
实验二:交换机的基本配置与操作 一、实验要求 (1)掌握windows网络参数的设置(TCP/IP协议的设置); (2)掌握交换机命令行各种操作模式的区别,以及模式之间的切换; (3)掌握交换机的全局的基本配置; (4)掌握交换机端口的常用配置参数; (5)查看交换机系统和…...
宏的优缺点?C++有哪些技术替代宏?(const)权限的平移、缩小
宏的优缺点? 优点: 1.增强代码的复用性。【减少冗余代码】 2.提高性能,提升代码运行效率。 缺点: 1.不方便调试宏。(因为预编译阶段进行了替换) 2.导致代码可读性差,可维护性差࿰…...
2024数维杯数学建模选题建议及各题思路来啦!
大家好呀,2024数维杯数学建模挑战赛开始了,来说一下初步的选题建议吧: 首先定下主基调, 本次数维杯建议选B。难度上C>A>B。B题目是比较经典的数据分析类题目,主要做统计分析差异显著性以及相关…...
centos的常用命令
CentOS是一个基于Red Hat Enterprise Linux(RHEL)的开源操作系统,常用于服务器环境。以下是一些CentOS中常用的命令: 文件和目录管理: ls:列出目录中的文件。 ls -l:以长格式列出文件和目录的…...
【Android】使用Handler实现一个定时器
需求 实现一个定时任务,每隔一秒执行一次 实现 使用Handler实现 private Handler topUIHandler;private void initTopUiHandler() {topUIHandler new Handler(getMainLooper()) {Overridepublic void handleMessage(Message msg) {//执行这个定时任务updateTop…...
Java | Leetcode Java题解之第80题删除有序数组中的重复项II
题目: 题解: class Solution {public int removeDuplicates(int[] nums) {int n nums.length;if (n < 2) {return n;}int slow 2, fast 2;while (fast < n) {if (nums[slow - 2] ! nums[fast]) {nums[slow] nums[fast];slow;}fast;}return sl…...
成都今日各区疫情情况/ seo won
BossAnim 项目地址:Alex-Cin/BossAnim简介:仿 boss 直聘,查看用户头像博客地址 http://www.jianshu.com/p/eadd1a764720BossAnim 博客地址 http://www.jianshu.com/p/eadd1a764720...
网站内部数据搜索怎么做/站长工具seo排名查询
目录树 新建Maven项目及步骤修改方法启动测试新建Maven项目及步骤 我这里是从创建开始讲,使用的工具是Idea2017版本。如果是已经创建了Maven,想改为spring boot项目的请直接跳到【修改方法】 1.点击右上角的File,出来的列表选择New Object&am…...
扬州市网站建设/百度账号管理
第一章、左旋转字符串 作者:July,yansha。 时间:二零一一年四月十四日。 微博:http://weibo.com/julyweibo。 出处:http://blog.csdn.net/v_JULY_v。 ------------------------------------------- 目录 序 前言 第一节…...
网站备案在哪查/友情链接软件
本书第一章提出了一个看似简单的问题,有最多1000万条不同的整型数据存在于硬盘的文件中,如何在1M内存的情况下对其进行尽可能快的排序。 每个数字用4byte,1M即可存储250 000个数据,显然,只要每次对250 000个数据排序&a…...
网站被入侵后需做的检测(1)/附子seo
1.用户分类 超级用户(root:#):可以在Linux下几乎做任何事情,不受限制普通用户(local:$):在Linux下做有限的事情 2.用户切换 (1)普通用户切换到…...
视频网站如何做引流/手机百度app最新版下载
兄弟姐妹们好,又是好久没有更新了,今天给大家简单介绍代理模式,一个很简单的设计模式,旨在不改变原对象的情况下通过代理对象来控制对原对象的访问。代理模式根据具体情况还可以分为远程代理、虚拟代理、保护代理等,下…...