RexUniNLU快速部署:GitHub Actions CI/CD流水线自动构建Docker镜像

张开发
2026/4/24 9:10:11 15 分钟阅读

分享文章

RexUniNLU快速部署:GitHub Actions CI/CD流水线自动构建Docker镜像
RexUniNLU快速部署GitHub Actions CI/CD流水线自动构建Docker镜像1. 为什么需要自动化部署RexUniNLURexUniNLU作为一款基于Siamese-UIE架构的零样本自然语言理解框架在实际应用中经常需要频繁部署和更新。传统的手动部署方式存在几个明显痛点环境配置复杂每次部署都需要重新安装Python 3.8、torch、modelscope等依赖模型下载耗时首次运行需要从ModelScope下载模型权重手动部署时这个过程需要重复进行版本管理困难不同环境的依赖版本可能不一致导致运行结果差异部署效率低下人工操作容易出错且无法实现快速迭代通过GitHub Actions实现CI/CD自动化部署可以完美解决这些问题。只需一次配置就能实现代码推送后自动构建Docker镜像大大提升部署效率和可靠性。2. 准备工作了解RexUniNLU项目结构在开始配置CI/CD之前我们先快速了解RexUniNLU的项目结构RexUniNLU/ ├── test.py # 核心测试脚本包含多领域示例 ├── server.py # FastAPI接口服务脚本 ├── requirements.txt # Python依赖清单 ├── Dockerfile # Docker构建文件需要创建 ├── .github/ │ └── workflows/ │ └── docker-build.yml # GitHub Actions工作流配置 └── README.md # 项目说明文档关键文件说明test.py包含智能家居、金融、医疗等多个领域的测试示例server.py提供HTTP API接口方便集成到其他系统requirements.txt定义了所有Python依赖包及其版本3. 创建Dockerfile构建文件首先我们需要创建Dockerfile这是自动化构建的基础# 使用官方Python 3.8基础镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 安装系统依赖 RUN apt-get update apt-get install -y \ gcc \ g \ rm -rf /var/lib/apt/lists/* # 复制项目文件 COPY . . # 安装Python依赖 RUN pip install --no-cache-dir -r requirements.txt # 创建模型缓存目录 RUN mkdir -p /root/.cache/modelscope # 暴露FastAPI服务端口 EXPOSE 8000 # 设置启动命令 CMD [python, server.py]这个Dockerfile做了以下几件事基于Python 3.8官方镜像构建安装编译所需的系统依赖复制项目文件到容器内安装所有Python依赖包创建模型缓存目录避免每次运行重复下载暴露服务端口并设置启动命令4. 配置GitHub Actions工作流在项目根目录创建.github/workflows/docker-build.yml文件name: Build and Push Docker Image on: push: branches: [ main ] tags: [ v* ] pull_request: branches: [ main ] jobs: build-and-push: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout code uses: actions/checkoutv4 - name: Set up Docker Buildx uses: docker/setup-buildx-actionv3 - name: Log in to GitHub Container Registry uses: docker/login-actionv3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Extract metadata for Docker id: meta uses: docker/metadata-actionv5 with: images: | ghcr.io/${{ github.repository }} tags: | typeref,eventbranch typeref,eventpr typesemver,pattern{{version}} typesemver,pattern{{major}}.{{minor}} typesha - name: Build and push Docker image uses: docker/build-push-actionv5 with: context: . push: ${{ github.event_name ! pull_request }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: typegha cache-to: typegha,modemax这个工作流配置实现了触发条件main分支推送、版本标签推送、Pull Request时自动运行多架构支持使用Buildx支持amd64和arm64架构自动标签根据分支、版本号、commit SHA自动生成镜像标签缓存优化使用GitHub Actions缓存加速构建过程5. 测试自动化构建流程配置完成后我们可以测试整个流程是否正常工作5.1 本地测试Docker构建首先在本地测试Dockerfile是否能正常构建# 构建镜像 docker build -t rexuninlu:latest . # 运行测试容器 docker run -p 8000:8000 -it rexuninlu:latest python test.py # 测试API服务 docker run -p 8000:8000 -d rexuninlu:latest curl http://localhost:8000/nlu -X POST -H Content-Type: application/json -d {text:明天上海的天气怎么样,labels:[查询天气,城市,时间]}5.2 推送代码触发自动化构建将代码推送到GitHub仓库后GitHub Actions会自动开始构建# 添加所有文件 git add . # 提交更改 git commit -m feat: 添加Dockerfile和GitHub Actions配置 # 推送到GitHub git push origin main推送完成后在GitHub仓库的Actions标签页可以看到构建进度。构建成功后在Packages页面可以看到新生成的Docker镜像。6. 使用自动化构建的镜像构建完成后可以通过多种方式使用生成的Docker镜像6.1 从GitHub Container Registry拉取镜像# 登录到GitHub Container Registry echo $GHCR_TOKEN | docker login ghcr.io -u USERNAME --password-stdin # 拉取镜像 docker pull ghcr.io/your-username/RexUniNLU:latest # 运行容器 docker run -p 8000:8000 ghcr.io/your-username/RexUniNLU:latest6.2 在docker-compose中使用创建docker-compose.yml文件version: 3.8 services: rexuninlu: image: ghcr.io/your-username/RexUniNLU:latest ports: - 8000:8000 environment: - PYTHONUNBUFFERED1 volumes: - model-cache:/root/.cache/modelscope volumes: model-cache:6.3 在Kubernetes中部署创建Deployment配置apiVersion: apps/v1 kind: Deployment metadata: name: rexuninlu spec: replicas: 2 selector: matchLabels: app: rexuninlu template: metadata: labels: app: rexuninlu spec: containers: - name: rexuninlu image: ghcr.io/your-username/RexUniNLU:latest ports: - containerPort: 8000 volumeMounts: - name: model-cache mountPath: /root/.cache/modelscope volumes: - name: model-cache emptyDir: {}7. 高级配置和优化建议7.1 使用缓存加速构建为了进一步提升构建速度可以优化Dockerfile的层缓存# 先复制requirements.txt单独安装依赖利用Docker缓存 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 然后再复制其他文件 COPY . .7.2 多阶段构建减小镜像体积# 构建阶段 FROM python:3.8-slim as builder WORKDIR /app COPY requirements.txt . RUN pip install --user -r requirements.txt # 运行阶段 FROM python:3.8-slim WORKDIR /app COPY --frombuilder /root/.local /root/.local COPY . . ENV PATH/root/.local/bin:$PATH7.3 添加健康检查在Dockerfile中添加健康检查确保服务正常运行HEALTHCHECK --interval30s --timeout30s --start-period5s --retries3 \ CMD curl -f http://localhost:8000/docs || exit 18. 总结通过GitHub Actions实现RexUniNLU的CI/CD自动化部署带来了显著的效率提升和质量保证主要优势一键部署代码推送后自动构建和推送Docker镜像环境一致性所有环境使用相同的Docker镜像避免环境差异问题快速迭代支持频繁的版本更新和快速回滚多架构支持自动构建支持amd64和arm64架构的镜像完全自动化从代码到可部署镜像的全流程自动化实践建议在本地充分测试Dockerfile后再推送到GitHub使用语义化版本标签管理不同版本的镜像定期清理旧的镜像版本避免存储空间浪费监控自动化构建的耗时优化构建流程现在每次对RexUniNLU的代码更新都会自动触发Docker镜像构建你可以专注于模型优化和功能开发而不用操心部署的繁琐细节。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章