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

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

时间 版本 修改人 描述
2024年4月18日10:30:13 V0.1 宋全恒 新建文档

简介和相关文档

基本流程

# 前提

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

步骤

CI服务器配置

创建用户

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

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

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

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

bash 复制代码
yangfei@ubuntu:~$ id zhangyi
uid=1033(zhangyi) gid=1033(zhangyi) groups=1033(zhangyi),998(docker)

解压actions-runner客户端压缩包

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

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

bash 复制代码
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,和标签。

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

在configure中,可以查看到这些重要的信息,
注意,配置的过程必须使用普通账户进行。即当前的zhangyi用户

bash 复制代码
# 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名称,以及标签。可以采用编程的方式来实现这个过程:

bash 复制代码
sudo -u yangfei -i
cd actions-ci

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

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

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

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

代码执行的结果如下:

bash 复制代码
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是否正确配置在我们的仓库上了。具体的过程如下:

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

将客户端注册为服务

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

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

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

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

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

bash 复制代码
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.

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

bash 复制代码
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通信连接已经建立了。

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

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

配置docker registry

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

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

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

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

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

添加工作流配置文件

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

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

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

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

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

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

yaml 复制代码
# 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已经正确的运行了。

总结

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

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

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

相关推荐
油泼辣子多加9 小时前
2024年11月11日Github流行趋势
github
qq_4337169514 小时前
编写第一个 Appium 测试脚本:从安装到运行!
自动化测试·软件测试·jmeter·ci/cd·职场和发展·appium·jenkins
内核程序员kevin16 小时前
GitHub新手入门 - 从创建仓库到协作管理
git·github
临水逸17 小时前
GitHub 上的开源项目推荐
开源·github
睡觉谁叫19 小时前
Cargo deny安装指路
c++·后端·ci/cd·rust·跨端
Tfly__1 天前
Ubuntu 20.04 安装 QGC v4.3 开发环境
linux·c++·qt·ubuntu·github·嵌入式·无人机
m0_738820202 天前
SSL/TLS握手过程
https·github·ssl
mortimer2 天前
”反思式三步翻译法” 应用于字幕翻译的尝试
开源·github·aigc
公西雒2 天前
关于在GitLab的CI/CD中用docker buildx本地化多架构打包dotnet应用的问题
ci/cd·docker·gitlab·qemu·dotnet
hiddenSharp4293 天前
【Python】使用 爬虫/GitHub Actions 自动更新 CSDN 个人主页浏览量统计
爬虫·python·github