04-18 周四 为LLM_inference项目配置GitHub CI过程记录

04-18 周四 为LLM_inference项目配置GitHub CI过程记录
时间版本修改人描述
2024年4月18日10:30:13V0.1宋全恒新建文档

简介和相关文档

  • 04-15 周一 GitHub仓库CI服务器配置过程文档
  • actions-runner 是托管与GitHub上的仓库,下载最新的客户端程序即可。
  • self hosted runner是github支持的ci特性,可以参见官网,了解具体内容。
  • GitHub marketplace是GitHub CI的工作流需要使用的步骤的仓库,Find tools to improve your workflow

基本流程

image-20240418173157368 # 前提
  • CI服务器已经正确安装了Docker服务。一般docker组是存在的,关键是查看/var/run/docker.sock文件的属主。
  • 在私仓上已经有了有了正确的镜像
  • github账户拥有待配置的仓库

步骤

CI服务器配置

创建用户

注意,主要是创建用户,并为用户分配docker组,不然会没有权限

 为大模型推理服务,创建相应的服务启动用户,如为LLM_inference配置zhangyi账户,首先查看账户存在与否,否则,创建账户,并设置密码

sudo useradd -m -s /bin/bash -G docker zhangyi
echo "zhangyi:123456" | sudo chpasswd

 可以使用id命令查看具体信息

yangfei@ubuntu:~$ id zhangyi
uid=1033(zhangyi) gid=1033(zhangyi) groups=1033(zhangyi),998(docker)

解压actions-runner客户端压缩包

注意,主要是设置名称,标签和工作目录

 然后我们在zhangyi用户目录下创建actions-ci目录,以保存actions-runner的客户端程序,仍然使用yangfei这个sudo的权限的用户

sudo mkdir -p /home/zhangyi/actions-ci
sudo chown zhangyi:zhangyi /home/zhangyi/actions-ci
sudo cp /home/yangfei/actions-ci/actions-runner-linux-x64-2.315.0.tar.gz /home/zhangyi/actions-ci/
sudo chown -R zhangyi:zhangyi /home/zhangyi/actions-ci
sudo tar -xzvf /home/zhangyi/actions-ci/actions-runner-linux-x64-2.315.0.tar.gz -C /home/zhangyi/actions-ci/
sudo chown -R zhangyi:zhangyi /home/zhangyi/actions-ci

获取GitHUBURL,token,并配置客户端标签

注意,需要使用own仓库的github账户登录才可以查看这些信息

这一步,需要首先获取token,以及URL,和标签。

image-20240418142134550

 这个步骤可以参见 [04-15 周一 GitHub仓库CI服务器配置过程文档](D:\400-工作\440-中心\443-高效能计算中心\04-15 周一 GitHub仓库CI服务器配置过程文档.md)

 在configure中,可以查看到这些重要的信息,

image-20240418142344391

注意,配置的过程必须使用普通账户进行。即当前的zhangyi用户

# Create the runner and start the configuration experience
$ ./config.sh --url https://github.com/CodexDive/LLMs_Inference --token BCTEUWKWB2VWIPORYECDC53GEDE4O# Last step, run it!
$ ./run.sh

 上面的过程是手动的方式来配置这个客户端,需要传入组,runner名称,以及标签。可以采用编程的方式来实现这个过程:

sudo -u yangfei -i
cd actions-ci
image-20240418144038604

 我们为这个runner设置名称42-reference-runner,标签设置为gpu,a100,inference,


./config.sh --unattended --url https://github.com/CodexDive/LLMs_Inference --token BCTEUWKWB2VWIPORYECDC53GEDE4O --labels gpu,x64,linux,a100,inference --name 42-reference-runner

 这个是为大模型应用配置的标签,不再赘述含义了。

./config.sh --unattended --url https://github.com/CodexDive/LLMChat --token BCTEUWKOJA3QT5TMD4XWAZTGEDW6O --labels gpu,x64,linux,a100,application --name 42-application-runner

 代码执行的结果如下:

zhangyi@ubuntu:~/actions-ci$ ./config.sh --unattended --url https://github.com/CodexDive/LLMs_Inference --token BCTEUWKWB2VWIPORYECDC53GEDE4O --labels gpu,x64,linux,a100,inference --name 42-reference-runner--------------------------------------------------------------------------------
|        ____ _ _   _   _       _          _        _   _                      |
|       / ___(_) |_| | | |_   _| |__      / \   ___| |_(_) ___  _ __  ___      |
|      | |  _| | __| |_| | | | | '_ \    / _ \ / __| __| |/ _ \| '_ \/ __|     |
|      | |_| | | |_|  _  | |_| | |_) |  / ___ \ (__| |_| | (_) | | | \__ \     |
|       \____|_|\__|_| |_|\__,_|_.__/  /_/   \_\___|\__|_|\___/|_| |_|___/     |
|                                                                              |
|                       Self-hosted runner registration                        |
|                                                                              |
--------------------------------------------------------------------------------# Authentication
√ Connected to GitHub# Runner Registration
√ Runner successfully added
# Runner settings√ Settings Saved.

注意,我们可以使用./config.sh 重新修改名称,标签。

注意,一个runner仅仅可以配置在一个仓库中。对于组织级的用户,一个runner可以配置来运行组织的多个仓库。

仓库上验证runner配置

 此时,我们就可以验证这个runner是否正确配置在我们的仓库上了。具体的过程如下:

image-20240418145942656

 由此,我们已经成功的配置了actions-runner客户端了。并且服务端收到了注册信息,可以看到标签和我们注册时填写的标签是一样的。因此注册过程是没有问题的。

将客户端注册为服务

注意,可以将自托管的运行器应用程序配置为服务,以在机器启动时自动启动运行器应用程序。

注意,默认使用systemd服务将actions-runner配置成服务。

注意,默认要使用具有sudo权限的用户来安装服务

注意,我们使用svc.sh来执行这个过程,需要使用sudo

 因此,首先切换普通用户zhangyi成具有sudo权限的用户yangfei

zhangyi@ubuntu:~/actions-ci$ ./svc.sh install zhangyi
Must run as sudo# 切换为yangfei用户
zhangyi@ubuntu:~/actions-ci$ exit
logout
yangfei@ubuntu:/home/zhangyi/actions-ci$ ./svc.sh install zhangyi
Must run as sudo
yangfei@ubuntu:/home/zhangyi/actions-ci$ sudo ./svc.sh install zhangyi
Creating launch runner in /etc/systemd/system/actions.runner.CodexDive-LLMs_Inference.42-reference-runner.service
Run as user: zhangyi
Run as uid: 1033
gid: 1033
Created symlink /etc/systemd/system/multi-user.target.wants/actions.runner.CodexDive-LLMs_Inference.42-reference-runner.service → /etc/systemd/system/actions.runner.CodexDive-LLMs_Inference.42-reference-runner.service.

 从上面,我门可以看出,已经为actions-runner创建了服务,并且服务名称为

actions.runner.CodexDive-LLMs_Inference.42-reference-runner.service.

 我们启动这个服务,防止服务器的开机和关机

yangfei@ubuntu:/home/zhangyi/actions-ci$ sudo ./svc.sh start/etc/systemd/system/actions.runner.CodexDive-LLMs_Inference.42-reference-runner.service
● actions.runner.CodexDive-LLMs_Inference.42-reference-runner.service - GitHub Actions Runner (CodexDive-LLMs_Inference.42-reference-runner)Loaded: loaded (/etc/systemd/system/actions.runner.CodexDive-LLMs_Inference.42-reference-runner.service; enabled; vendor preset: enabled)Active: active (running) since Thu 2024-04-18 07:09:29 UTC; 26ms agoMain PID: 3665246 (runsvc.sh)Tasks: 1 (limit: 629145)Memory: 956.0KCGroup: /system.slice/actions.runner.CodexDive-LLMs_Inference.42-reference-runner.service├─3665246 /bin/bash /home/zhangyi/actions-ci/runsvc.sh└─3665255 [node]Apr 18 07:09:29 ubuntu systemd[1]: Started GitHub Actions Runner (CodexDive-LLMs_Inference.42-reference-runner).
Apr 18 07:09:29 ubuntu runsvc.sh[3665246]: .path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
yangfei@ubuntu:/home/zhangyi/actions-ci$ 

 将actions-runner配置成服务之后,我们再次查看网页,self-hosted runner应该变为idle表明客户端-server通信连接已经建立了。

image-20240418151328066

 我们也可以使用svc.sh这个工具来实现做服务的管理,诸如启动,停止,查看,卸载,如下图所示:

image-20240418152107536

 也可以浏览官网查看具体的详情。

  • Configuring the self-hosted runner application as a service

配置docker registry

注意,主要是配置私有仓库,因为CI过程中需要使用自定义镜像,因此需要配置docker的配置文件

注意,这个过程不一定是必须得,如果不使用自定义的镜像,而使用GitHub-hosted的vm进行CI,则该步骤需要进行。

 配置docker registry的过程,相当于配置私有镜像仓库,也即在daemon.json中配置。

image-20240418151629171

 具体可以参见之前撰写的文档

  • [03-01 周五 计算应用组基础环境使用](D:\400-工作\440-中心\443-高效能计算中心\03-01 周五 计算应用组基础环境使用.md)

注意,修改了docker之后,记得重启验证,建议也重启一下actions-runner服务。

添加工作流配置文件

注意,由其控制CI工作流的具体过程细节。

 关于工作流配置文件的组成和解析,参见文档

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

 我们需要了解的是,每个仓库需要的CI过程不一样,CI一般的包含单元测试的执行和覆盖率的上传,但也有许多特定的步骤。如拷贝CI过程中的文件,自动构建镜像并推送Harbor,自动将镜像部署成服务,多种多样,不一而足。

 我们演示一个经典的,并且包含了GPU使用的过程。由于LLM_inference是一个大模型推理的仓库,因此在单元测试执行过程中,需要调用GPU的资源。由于42服务器,有8张A100,我们为推理分配一张A100来进行CI。CI的过程包含

  1. 拉取镜像
  2. 检出代码
  3. 准备环境
  4. 执行单元测试
  5. 推送测试覆盖率结果

注意,需要将工作流配置文件放置在.github/workflows/目录下

# 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

注意,上面的on确定了CI触发的时机。当在分支上产生push,或者main分支产生pr时,均会产生CI

web查看ci过程

 我们在分支features-ci-songquanheng产生一次一次推送,然后观察仓库,可以看到actions目录下有了如下的workflow输出,表明CI已经正确的运行了。

image-20240418171556937

总结

 本文以LLM_Inference为例,使用shell详细描述了为一个仓库配置actions-runner的过程,具体包括如下内容:

  1. 配置CI服务器中actions-runner客户端
  2. 配置workflow工作流

 通过上述的配置,可以为仓库创建self-hosted-runner,并且使用self-hosted-host可以方便的使用gpu,而且工作流配置可以灵活的使用actions marketplace中的组件方便我们进行集成需要的功能。

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

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

相关文章

一个年薪30w软件测试员的职业规划,献给还在迷茫中的朋友

先抛出一个观点 , 那些,担心30岁后,35岁后,40岁后,无路可走的;基本属于能力不够、或者思维太局限 。 总之,瞎担心 / 不长进 。 具体,见下面正文 。 曾经,在16年&#xff…

AI技术赋能下的视频监控方案是如何解决新能源汽车充电难问题的?

一、方案背景 刚刚结束的第十八届北京车展异常火爆,其中一组与汽车有关的数字让人格外关注。根据乘联会2024年4月19日公布的最新数据,全国乘用车市场零售达到51.6万辆,其中新能源车的销量约为26万辆,市场渗透率达到50.39%。 这意味…

音视频开发4 FFmpeg windows 环境搭建,QT 安装,动态库的搜索路径

FFmpeg 为了让所有平台的开发者都能够学习到音视频开发的通用技术,本教程主要讲解跨平台的音视频开发库FFmpeg。其实只要你掌握了FFmpeg,也可以很快上手其他音视频开发库,因为底层原理都是一样的,你最终操作的都是一样的数据&…

【第10章】spring-mvc转发和重定向

文章目录 前言一、准备二、转发1. 视图解析器(推荐)2. 关键字(forward)3. request 三、重定向1.关键字(redirect)2. HttpServletResponse 四、区别总结 前言 前面介绍了视图解析器的使用,但是对我们原有转发和重定向有影响,接下来我们通过案例,来使用学习转发和重定向的用法。…

ComfyUI 基础教程(十四):ComfyUI中4种实现局部重绘方法

在ComfyUI中有多种方式可以实现局部重绘,简单的方式是使用VAE内补编码器进行局部重绘,也可以用Fooocus inpaint进行局部重绘,还可以用controlNet的inpaint模型进行局部重绘,以及使用Clip seg蒙版插件! 本篇介绍使用VAE內补编码器进行局部重绘的方法。 1、VAE内补编码器 局…

《架构风清扬-Java面试系列第28讲》聊聊SynchronousQueue的使用及适合场景

SynchronousQueue是BlockingQueue接口的一个实现类之一 这个属于基础性问题,老规矩,我们将从使用场景和代码示例来进行讲解 来,思考片刻,给出你的答案 1,使用场景 实现:特殊的无缓冲队列,每一个…

帆软报表9.0连接达梦数据库

一、将驱动复制到帆软安装目录下 二、配置数据库连接 注意:dm.jdbc.driver.DmDriver是直接在文本框输入的 进行以上两部就能连接达梦数据库了

揭秘!如何利用自动化工具提升抖音推广效果

亲爱的读者朋友们,你是否在为抖音的推广效果而苦恼?看着别人家的视频轻松获得大量曝光,你是否也心生羡慕?今天,我们就来分享一个秘密武器,让你轻松提升抖音推广效果! 首先,让我们来了…

开发环境待

一 web开发环境搭建 1 web开发环境概述 所谓web开发,指的就是从网页中向后端程序发送请求.与后端程序进行交互. 流程图: 1,Web服务器是指驻留于因特网上某种类型计算机的程序. 2, 可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界 浏览…

微信答题活动怎么做_智慧与惊喜的碰撞

在这个信息爆炸的时代,如何吸引用户的眼球,让他们在众多品牌中驻足停留?答案或许就藏在一次别开生面的微信答题活动中。今天,就让我们一起走进这场以智慧与惊喜为主题的微信答题狂欢夜,感受其带来的独特魅力。 工具/原…

AI预测福彩3D第10套算法实战化赚米验证第2弹2024年5月6日第2次测试

由于今天白天事情比较多,回来比较晚了,趁着还未开奖,赶紧把预测结果发出来吧~今天是第2次测试~ 2024年5月6日福彩3D预测结果 6-7码定位方案如下: 百位:3、4、1、7、8、9 十位:4、5、3、7、8、9 个位&#x…

JS基础:输出信息的5种方式详解

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端基础路线”,可获取完整web基础…

python3+requests+unittest实战系列【一】

1.环境准备 python3 pycharm编辑器 2.框架目录展示 (该套代码只是简单入门,有兴趣的可以不断后期完善) 1)run.py主运行文件,运行之后可以生成相应的测试报告,并以邮件形式发送; &#xff0…

【电商-虾皮】

电商-虾皮 ■ 人口分布■ 市场■ 欧美市场■ 东南亚市场■ 运营模式■ 流量来源■ ERP辅助软件■■ 选品方法■■■ 人口分布 ■ 市场 ■ 欧美市场 亚马逊 ■ 东南亚市场 shopee ■ 运营模式 ■ 流量来源

Matlab 手写板设计

写字板 1、介绍 MATLAB手写板可以作为一个很好的数据输入口,其可以获取该手写板上任意字母、数字,甚至可以制作样本数据。具体用途体现在如下几方面: 数学公式输入:手写板允许用户直接用手写方式输入复杂的数学公式,这…

JavaScript中Math函数与舍入

立方根 console.log(Math.sqrt(25)); //数学方式25平方根 console.log(25 ** (1 / 2)); //25的0.5次方 console.log(8 ** (1 / 3)); //8的1/3次方计算最大最小值 console.log(Math.max(1, 5, 88, 22, 132)); //返回最大值 console.log(Math.max(1, 5, 88, 22, 132)); //…

SpringBoot中阿里OSS简单使用

官方文档:Java跨域设置实现跨域访问_对象存储(OSS)-阿里云帮助中心 1.pom中引入依赖 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version> </dependency> 如…

基于Spring Boot的大学生社团活动平台设计与实现

基于Spring Boot的大学生社团活动平台设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 前台首页功能界面图&#xff0c;学生在大学生社团…

模拟电路设计与分析——电流

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 原子电流的产生电流的单位电流的方向直流电交流电直流&交流对比开路&闭路 原子 世界万物都是由原子构成&#xff0c;那么…

跨领域精英汇聚,驱动ATFX加速迈向行业巅峰

人才是企业发展的第一资源&#xff0c;企业间的竞争归根结底是人才的竞争。若想实现高质量发展目标&#xff0c;需要高端复合型人才队伍作支撑。面对日益激烈的市场竞争&#xff0c;作为行业头牌品牌&#xff0c;ATFX展现其强大的品牌魅力与前瞻战略布局&#xff0c;近半年来在…