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 ago
   Main PID: 3665246 (runsvc.sh)
      Tasks: 1 (limit: 629145)
     Memory: 956.0K
     CGroup: /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-python

name: LLM_Inference CI

on:
  push:
    branches: [ "features-ci-songquanheng" ]
  pull_request:
    branches: [ "main" ]

permissions:
  contents: read

jobs:
  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-py3
      options: --runtime nvidia --shm-size=32gb
      
      credentials:
        username: admin
        password: admin@ZJ2023
      env: 
        NVIDIA_VISIBLE_DEVICES: 7

      volumes:
        - /home/yangfei/:/home/yangfei
      
      ports:
        - 22

    steps:    
    - name: show pyhon version
      run: |
        python --version
    - name: show the gpus available
      run: |
        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 Codecov
      uses: codecov/codecov-action@v4
      with:
        token: ${{ secrets.CODECOV_TOKEN }}
        file: coverage.xml
        verbose: 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中的组件方便我们进行集成需要的功能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多C段的美国站群服务器有什么用途?

多C段的美国站群服务器有什么用途? 多C段的美国站群服务器是一种常见的网络运营策略,其用途主要体现在以下几个方面: 多C段的美国站群服务器有什么用途? 1. 提高站点排名和流量 部署多个站点在不同的C段IP地址上,可以通过不同的IP地址发布…

BGP协议应用:SW1、SW2、SW3、RT1、RT2之间运行BGP协议

8.SW1、SW2、SW3、RT1、RT2之间运行BGP协议,SW1、SW2、RT1 AS号65001、RT2 AS号65002、SW3 AS号65003。 (1)SW1、SW2、SW3、RT1、RT2之间通过Loopback1建立IPv4 BGP邻居。SW1和SW2之间财务通过Loopback2建立IPv4 BGP邻居,SW1和SW2的Loopback2互通采用静态路由。 (2)SW1…

运行一个jar包

目录 传送门前言一、Window环境二、Linux环境1、第一步:环境配置好,安装好jdk2、第二步:打包jar包并上传到Linux服务器3、第三步:运行jar包 三、docker环境1、Linux下安装docker和docker compose2、Dockerfile方式一运行jar包2.1、…

优思学院|HR部门如何制定公司的精益六西格玛培训计划?

在许多企业中,精益六西格玛作为一种提升效率和质量的重要方法论,越来越受到重视。HR部门在推广和实施精益六西格玛培训计划中其实也扮演着关键角色。以下是HR部门可以采取的几个步骤,以有效地制定和实施这样的培训计划。 1. 需求分析 首先&…

人工智能学习+Python的优势

1.人工智能的发展阶段 1.1 强人工智能: 1.2 弱人工智能: 2.符号学习 符号学习的本质就是:规定好的逻辑和顺序,根据这个模板告诉机器接下来需要做什么,遵循if...then原则——>缺点:不能根据新的场景…

本地主机访问服务器的Redis -- 配置 ssh 端口转发

前言 在进行Java开发时,高度的依赖 Windows 上的开发软件 idea ,那么我们想访问位于服务器上的 redis 怎么办呢?在平时我们想访问位于服务器上的程序,只需要开放它的端口即可,比如我们创建的网站,比如 tomc…

Go通过CRUD实现学生管理系统

虽然这个项目没有什么含金量,但是可以熟悉go的语法和go开发项目的一般流程 项目结构 项目实现了五个功能: (1)增加一个学生 (2)删除一个学生 (3)修改一个学生的信息 (4&#xf…

基于微信小程序的图书馆预约系统的设计与实现

个人介绍 hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的…

【一起深度学习吧!!!!!】24/05/03

卷积层里的多输入输出通道 1、 多输入通道:代码演示: 多输出通道:代码实现: 1、 多输入通道: 当输入包含多个通道时,需要构造一个输入通道与之相等的卷积核,以便进行数据互相关计算。 例如李沐…

责任链模式和观察者模式

1、责任链模式 1.1 概述 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导…

XMall-Front:基于Vue.js的XMall商城前台页面的开发实践

XMall-Front:基于Vue.js的XMall商城前台页面的开发实践 摘要 随着电子商务的蓬勃发展,用户体验逐渐成为决定电商平台成功与否的关键因素。作为XMall商城项目的一部分,XMall-Front是基于Vue.js的前端页面开发,其目标是为用户提供…

《深入解析WIndows操作系统》第10章读书笔记

1、大页面和小页面:虚拟地址空间被划分成以页面为单位,这是因为硬件内存管理单元在页面的粒度上,将虚拟地址转译为物理地址。Windows支持两种页面尺寸:大页面和小页面,根据处理器体系结构不同,实际尺寸值有…

HAL PWM 配置 占空比 频率 stm32 学习笔记

title: HALPWM配置占空比频率 tags: STM32ClionHal 1.STM32CubeMX学习笔记(13)——PWM输出(呼吸灯)使用 2.STM32标准库HAL库 | 高精度动态调节PWM输出频率占空比 看你cubemx 里面的配置时钟频率是多少 参照第二篇文章描述修改 下面俩个参数就行 uin…

SAP生产订单常用状态以及

常用系统状态: 状态 状态 CRTD 已建立 REL 已核发 CNF 已确认 PCNF 已部份确认 DLV 已交货 DLT 删除指示码 LKD 已锁住 TECO 技术完成 GMPS 已发料 关闭 关闭 工单结案前的生产报表分析 路径:后勤系统- 生产- 现场控制- 信息系统-订单信息系…

NFS共享存储服务配置实践

一、NFS 1.NFS定义 NFS(Network File System)网络文件服务:基于TCP/IP传输的网络文件系统协议,NFS服务的实现依赖于RPC(Remote Process Call)远端过程调用:通过使用NFS协议,客户机…

02、Kafaka 简介

02、Kafka 简介 1、 Kafka 简介 Apache Kafka 是一个分布式的发布-订阅消息系统,最初由 LinkedIn 公司开发,并在 2010 年贡献给了 Apache 软件基金会,成为一个顶级开源项目。Kafka 设计之初是为了满足高吞吐量、可扩展性、持久性、容错性以…

VALSE 2024特邀报告内容解析|多模态视觉融合方法:是否存在性能极限?

2024年视觉与学习青年学者研讨会(VALSE 2024)于5月5日到7日在重庆悦来国际会议中心举行。本公众号将全方位地对会议的热点进行报道,方便广大读者跟踪和了解人工智能的前沿理论和技术。欢迎广大读者对文章进行关注、阅读和转发。文章是对报告人…

高频次的低价监测如何实现

品牌在做控价的过程中,需要对渠道中的低价数据进行监测,但价格数据变化快,涉及的促销信息也很多,如何将这些变化的数据监测到位,同时对于低价的凭证还要截图留证,以便有效的进行渠道治理,这就需…

python菜鸟级安装手册

python安装教程 电脑-右键-属性,确认系统类型和版本号,比如本案例系统是64位 win10 点击python官网,进行下载 适用于 Windows 的 Python 版本 |Python.org 选择第一个安装程序64位即可满足需要, 嵌入式程序包是压缩包版本&…

美国站群服务器的CN2线路在国际互联网通信中的优势?

美国站群服务器的CN2线路在国际互联网通信中的优势? CN2线路,或称中国电信国际二类线路,是中国电信在全球范围内建设的高速骨干网络。这条线路通过海底光缆系统将中国与全球连接起来,为用户提供高速、低延迟的网络服务。CN2线路在国际互联网…