news 2026/3/29 6:18:05

ERNIE-4.5-0.3B-PT部署教程(CI/CD集成版):GitHub Actions自动部署流水线

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ERNIE-4.5-0.3B-PT部署教程(CI/CD集成版):GitHub Actions自动部署流水线

ERNIE-4.5-0.3B-PT部署教程(CI/CD集成版):GitHub Actions自动部署流水线

你是不是也遇到过这样的烦恼?每次部署一个AI模型,都要手动执行一堆命令,配置环境、下载模型、启动服务,步骤繁琐还容易出错。特别是当模型更新或者需要重新部署时,整个过程又要重来一遍,费时费力。

今天我要分享的,就是如何用GitHub Actions为ERNIE-4.5-0.3B-PT模型搭建一个全自动的部署流水线。简单来说,就是把你之前手动做的所有事情,交给GitHub自动完成。你只需要把代码推送到仓库,剩下的GitHub都会帮你搞定——自动部署模型、启动服务,甚至还能自动测试。

这篇文章会手把手带你完成整个流程,从零开始搭建一个完整的CI/CD(持续集成/持续部署)系统。即使你之前没接触过GitHub Actions,也能跟着一步步做出来。

1. 环境准备与项目初始化

在开始之前,我们先明确一下这个教程的目标:创建一个能够自动部署ERNIE-4.5-0.3B-PT模型的GitHub Actions工作流。

1.1 你需要准备什么

  • GitHub账号:这是使用GitHub Actions的基础
  • 基本的Git使用知识:知道怎么克隆仓库、提交代码、推送代码
  • 对Docker有基本了解:知道镜像和容器的概念就行
  • 一个可以运行模型的服务器或云服务:比如阿里云、腾讯云、AWS等,或者你自己的服务器

1.2 创建项目仓库

首先,我们需要在GitHub上创建一个新的仓库来存放我们的项目代码。

  1. 登录GitHub,点击右上角的"+"号,选择"New repository"
  2. 给仓库起个名字,比如ernie-4.5-deployment
  3. 添加描述:"ERNIE-4.5-0.3B-PT模型的自动部署流水线"
  4. 选择公开(Public)或私有(Private),根据你的需要
  5. 勾选"Add a README file"
  6. 点击"Create repository"

创建完成后,把仓库克隆到本地:

git clone https://github.com/你的用户名/ernie-4.5-deployment.git cd ernie-4.5-deployment

2. 理解ERNIE-4.5-0.3B-PT模型

在开始搭建部署流水线之前,我们先简单了解一下我们要部署的模型。

2.1 模型简介

ERNIE 4.5是百度推出的新一代大语言模型,我们今天要部署的是其中的0.3B参数版本(PT表示预训练版本)。虽然参数规模相对较小,但它在很多任务上表现不错,而且部署起来对硬件要求不高。

这个模型有几个特点:

  • 支持文本生成和理解
  • 基于vLLM进行高效推理
  • 可以用Chainlit构建交互式前端
  • 部署相对简单,适合学习和实验

2.2 部署架构

我们的部署方案包含三个主要部分:

  1. 模型服务:使用vLLM部署ERNIE-4.5-0.3B-PT,提供API接口
  2. 前端界面:使用Chainlit构建Web界面,方便交互
  3. 自动化流水线:使用GitHub Actions实现一键部署

整个架构是这样的:GitHub Actions检测到代码变更 → 自动构建Docker镜像 → 推送到镜像仓库 → 在目标服务器上拉取镜像并启动服务。

3. 创建基础部署文件

在搭建自动化流水线之前,我们先创建一些基础文件,这些文件定义了如何部署我们的模型。

3.1 创建Dockerfile

Dockerfile定义了如何构建包含模型和服务的容器镜像。在项目根目录创建Dockerfile文件:

# 使用Python 3.9作为基础镜像 FROM python:3.9-slim # 设置工作目录 WORKDIR /app # 安装系统依赖 RUN apt-get update && apt-get install -y \ git \ curl \ && rm -rf /var/lib/apt/lists/* # 复制依赖文件 COPY requirements.txt . # 安装Python依赖 RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码 COPY . . # 创建日志目录 RUN mkdir -p /root/workspace # 暴露端口 EXPOSE 8000 7860 # 启动脚本 COPY start.sh . RUN chmod +x start.sh # 设置启动命令 CMD ["./start.sh"]

3.2 创建启动脚本

创建start.sh启动脚本:

#!/bin/bash # 启动vLLM服务(后台运行) echo "启动vLLM服务..." python -m vllm.entrypoints.openai.api_server \ --model baidu/ernie-4.5-0.3b-pt \ --host 0.0.0.0 \ --port 8000 \ --max-model-len 4096 \ --tensor-parallel-size 1 \ --gpu-memory-utilization 0.9 \ > /root/workspace/llm.log 2>&1 & # 等待vLLM服务启动 echo "等待vLLM服务启动..." sleep 30 # 检查vLLM服务是否启动成功 if curl -s http://localhost:8000/v1/models > /dev/null; then echo "vLLM服务启动成功" else echo "vLLM服务启动失败,查看日志:" cat /root/workspace/llm.log exit 1 fi # 启动Chainlit前端 echo "启动Chainlit前端..." chainlit run app.py -h 0.0.0.0 -p 7860

3.3 创建Chainlit应用

创建app.py文件,这是Chainlit的前端应用:

import chainlit as cl import openai import os # 配置OpenAI客户端(连接到本地vLLM服务) client = openai.OpenAI( base_url="http://localhost:8000/v1", api_key="not-needed" ) @cl.on_message async def main(message: cl.Message): # 显示加载指示器 msg = cl.Message(content="") await msg.send() try: # 调用vLLM API response = client.chat.completions.create( model="baidu/ernie-4.5-0.3b-pt", messages=[ {"role": "system", "content": "你是一个有帮助的AI助手。"}, {"role": "user", "content": message.content} ], temperature=0.7, max_tokens=1024 ) # 获取回复内容 reply = response.choices[0].message.content # 更新消息内容 msg.content = reply await msg.update() except Exception as e: error_msg = f"请求失败:{str(e)}" msg.content = error_msg await msg.update() @cl.on_chat_start async def start(): await cl.Message(content="你好!我是ERNIE-4.5-0.3B-PT模型,有什么可以帮你的吗?").send()

3.4 创建依赖文件

创建requirements.txt文件:

vllm>=0.3.0 chainlit>=1.0.0 openai>=1.0.0 fastapi>=0.104.0 uvicorn>=0.24.0 httpx>=0.25.0

3.5 创建配置文件

创建.env.example环境变量示例文件:

# 模型配置 MODEL_NAME=baidu/ernie-4.5-0.3b-pt VLLM_HOST=0.0.0.0 VLLM_PORT=8000 CHAINLIT_PORT=7860 # 服务器配置(在GitHub Secrets中设置) DEPLOY_HOST=your-server-ip DEPLOY_USER=your-username DEPLOY_SSH_KEY=your-ssh-private-key

4. 配置GitHub Actions自动化流水线

现在到了最核心的部分——配置GitHub Actions工作流。这个工作流会自动完成构建、测试、部署的全过程。

4.1 创建工作流目录

在项目根目录创建.github/workflows/目录:

mkdir -p .github/workflows

4.2 创建主工作流文件

.github/workflows/目录下创建deploy.yml文件:

name: Deploy ERNIE-4.5 Model on: push: branches: [ main ] pull_request: branches: [ main ] workflow_dispatch: # 允许手动触发 jobs: test-and-build: runs-on: ubuntu-latest steps: - name: 检出代码 uses: actions/checkout@v3 - name: 设置Python环境 uses: actions/setup-python@v4 with: python-version: '3.9' - name: 安装依赖 run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: 代码质量检查 run: | echo "运行代码检查..." # 这里可以添加代码检查工具,如flake8、black等 - name: 构建Docker镜像 run: | echo "构建Docker镜像..." docker build -t ernie-4.5-model:latest . - name: 运行容器测试 run: | echo "启动测试容器..." docker run -d -p 8000:8000 -p 7860:7860 --name test-ernie ernie-4.5-model:latest sleep 40 echo "测试vLLM服务..." if curl -s http://localhost:8000/v1/models | grep -q "ernie"; then echo "vLLM服务测试通过" else echo "vLLM服务测试失败" docker logs test-ernie exit 1 fi echo "清理测试容器..." docker stop test-ernie docker rm test-ernie deploy: needs: test-and-build runs-on: ubuntu-latest if: github.event_name == 'push' && github.ref == 'refs/heads/main' steps: - name: 检出代码 uses: actions/checkout@v3 - name: 配置SSH run: | mkdir -p ~/.ssh echo "${{ secrets.DEPLOY_SSH_KEY }}" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa # 添加服务器到known_hosts ssh-keyscan -H ${{ secrets.DEPLOY_HOST }} >> ~/.ssh/known_hosts - name: 部署到服务器 run: | echo "开始部署到服务器..." # 创建部署脚本 cat > deploy.sh << 'EOF' #!/bin/bash echo "停止现有容器..." docker stop ernie-4.5-container 2>/dev/null || true docker rm ernie-4.5-container 2>/dev/null || true echo "拉取最新镜像..." docker pull your-dockerhub-username/ernie-4.5-model:latest echo "启动新容器..." docker run -d \ --name ernie-4.5-container \ --restart unless-stopped \ -p 8000:8000 \ -p 7860:7860 \ -v /root/workspace:/root/workspace \ your-dockerhub-username/ernie-4.5-model:latest echo "等待服务启动..." sleep 30 echo "检查服务状态..." if curl -s http://localhost:8000/v1/models > /dev/null; then echo "部署成功!" echo "vLLM API地址: http://$HOSTNAME:8000" echo "Chainlit界面: http://$HOSTNAME:7860" else echo "部署失败,查看日志..." docker logs ernie-4.5-container exit 1 fi EOF # 上传并执行部署脚本 scp deploy.sh ${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}:/tmp/ ssh ${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }} "chmod +x /tmp/deploy.sh && /tmp/deploy.sh" - name: 发送部署通知 if: success() run: | echo "部署完成!" echo "服务地址:http://${{ secrets.DEPLOY_HOST }}:7860"

4.3 创建Docker镜像构建工作流(可选)

如果你想把镜像推送到Docker Hub,可以创建另一个工作流文件docker-build.yml

name: Build and Push Docker Image on: push: branches: [ main ] tags: [ 'v*' ] jobs: build-and-push: runs-on: ubuntu-latest steps: - name: 检出代码 uses: actions/checkout@v3 - name: 登录Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: 构建并推送Docker镜像 uses: docker/build-push-action@v4 with: context: . push: true tags: | ${{ secrets.DOCKER_USERNAME }}/ernie-4.5-model:latest ${{ secrets.DOCKER_USERNAME }}/ernie-4.5-model:${{ github.sha }}

5. 配置GitHub Secrets

GitHub Secrets是用来安全存储敏感信息的地方,比如服务器密码、API密钥等。我们需要配置几个关键的Secrets。

5.1 添加SSH相关Secrets

  1. 进入你的GitHub仓库
  2. 点击"Settings" → "Secrets and variables" → "Actions"
  3. 点击"New repository secret"

需要添加的Secrets:

  • DEPLOY_HOST:你的服务器IP地址
  • DEPLOY_USER:服务器登录用户名(如root)
  • DEPLOY_SSH_KEY:服务器的SSH私钥

5.2 生成SSH密钥对

如果你还没有SSH密钥,可以在服务器上生成:

# 在服务器上执行 ssh-keygen -t rsa -b 4096 -C "github-actions-deploy" # 一路回车使用默认设置 # 查看公钥 cat ~/.ssh/id_rsa.pub # 将公钥添加到authorized_keys cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys # 查看私钥(复制这个到GitHub Secrets) cat ~/.ssh/id_rsa

5.3 添加Docker Hub Secrets(可选)

如果你使用Docker Hub:

  • DOCKER_USERNAME:你的Docker Hub用户名
  • DOCKER_PASSWORD:你的Docker Hub密码或访问令牌

6. 服务器环境准备

在自动化部署之前,我们需要在目标服务器上做一些准备工作。

6.1 安装Docker

在服务器上安装Docker:

# 更新系统包 sudo apt-get update # 安装Docker依赖 sudo apt-get install -y \ apt-transport-https \ ca-certificates \ curl \ software-properties-common # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 添加Docker仓库 sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" # 安装Docker sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io # 启动Docker服务 sudo systemctl start docker sudo systemctl enable docker # 验证安装 sudo docker --version

6.2 配置防火墙

开放必要的端口:

# 开放8000端口(vLLM API) sudo ufw allow 8000/tcp # 开放7860端口(Chainlit前端) sudo ufw allow 7860/tcp # 开放22端口(SSH) sudo ufw allow 22/tcp # 启用防火墙 sudo ufw enable # 查看防火墙状态 sudo ufw status

6.3 创建工作目录

# 创建工作目录 mkdir -p /root/workspace chmod 755 /root/workspace # 创建日志文件 touch /root/workspace/llm.log chmod 644 /root/workspace/llm.log

7. 测试自动化部署

现在一切准备就绪,我们来测试一下整个自动化部署流程。

7.1 提交代码到GitHub

# 添加所有文件 git add . # 提交更改 git commit -m "初始提交:添加ERNIE-4.5部署文件" # 推送到GitHub git push origin main

7.2 查看GitHub Actions运行状态

  1. 进入你的GitHub仓库
  2. 点击"Actions"标签页
  3. 你应该能看到"Deploy ERNIE-4.5 Model"工作流正在运行
  4. 点击进入可以查看详细日志

7.3 手动触发部署(如果需要)

如果你不想等待代码推送,也可以手动触发部署:

  1. 进入仓库的"Actions"页面
  2. 选择"Deploy ERNIE-4.5 Model"工作流
  3. 点击"Run workflow"
  4. 选择分支(默认main)
  5. 点击"Run workflow"

7.4 验证部署结果

部署完成后,可以通过以下方式验证:

  1. 检查vLLM API

    curl http://你的服务器IP:8000/v1/models

    应该返回模型信息

  2. 访问Chainlit界面: 在浏览器中打开:http://你的服务器IP:7860应该能看到聊天界面

  3. 查看服务器日志

    # 在服务器上执行 docker logs ernie-4.5-container # 查看模型日志 cat /root/workspace/llm.log

8. 使用与维护

8.1 日常使用

部署完成后,你可以通过以下方式使用:

  1. Web界面:访问http://服务器IP:7860直接聊天
  2. API调用:通过vLLM的OpenAI兼容API调用
    import openai client = openai.OpenAI( base_url="http://服务器IP:8000/v1", api_key="not-needed" ) response = client.chat.completions.create( model="baidu/ernie-4.5-0.3b-pt", messages=[ {"role": "user", "content": "你好,介绍一下你自己"} ] ) print(response.choices[0].message.content)

8.2 更新模型或代码

当需要更新时,只需要:

  1. 修改本地代码
  2. 提交并推送到GitHub
  3. GitHub Actions会自动完成部署
# 修改代码后 git add . git commit -m "更新:优化部署配置" git push origin main

8.3 监控与日志

查看实时日志

# 查看容器日志 docker logs -f ernie-4.5-container # 查看模型加载日志 tail -f /root/workspace/llm.log

监控资源使用

# 查看容器资源使用 docker stats ernie-4.5-container # 查看服务器资源 htop

8.4 故障排除

常见问题及解决方法

  1. 服务启动失败

    # 检查端口占用 netstat -tlnp | grep :8000 netstat -tlnp | grep :7860 # 重启容器 docker restart ernie-4.5-container
  2. 模型加载慢

    • 检查网络连接
    • 确保服务器有足够内存
    • 首次加载需要下载模型,耐心等待
  3. API无法访问

    # 检查防火墙 sudo ufw status # 检查服务状态 curl -v http://localhost:8000/v1/models

9. 总结

通过这个教程,我们成功搭建了一个完整的ERNIE-4.5-0.3B-PT模型自动化部署流水线。让我们回顾一下关键点:

9.1 我们实现了什么

  1. 全自动部署:从代码推送到服务上线,完全自动化
  2. 持续集成:每次代码变更都会自动测试和构建
  3. 一键部署:手动触发或自动触发部署
  4. 完整的监控:日志、状态检查、故障恢复
  5. 易于维护:配置即代码,版本控制所有部署配置

9.2 这个方案的优势

  • 节省时间:部署过程从手动几十分钟缩短到自动几分钟
  • 减少错误:自动化流程避免了人为操作失误
  • 易于复制:同样的配置可以在多台服务器上使用
  • 便于协作:团队成员都可以通过GitHub参与
  • 可追溯:每次部署都有完整的日志记录

9.3 下一步可以做什么

如果你想让这个部署方案更完善,可以考虑:

  1. 添加更多测试:单元测试、集成测试、性能测试
  2. 实现蓝绿部署:零停机时间更新
  3. 添加监控告警:服务异常时自动通知
  4. 支持多环境:开发、测试、生产环境分离
  5. 优化镜像大小:使用多阶段构建减小镜像体积

9.4 最后的建议

对于刚开始接触自动化部署的朋友,我的建议是:

  1. 从小开始:先实现基本功能,再逐步完善
  2. 多测试:在本地充分测试后再推送到生产
  3. 保持简单:不要过度设计,满足当前需求就好
  4. 文档化:好的文档能让维护更容易
  5. 定期回顾:定期检查工作流,优化改进

自动化部署看起来复杂,但一旦搭建起来,它会为你节省大量时间,让你更专注于模型开发和优化,而不是重复的部署工作。希望这个教程能帮助你迈出自动化部署的第一步!


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 19:04:10

如何提高用户满意度?Qwen2.5对话连贯性优化技巧

如何提高用户满意度&#xff1f;Qwen2.5对话连贯性优化技巧 1. 为什么对话连贯性直接影响用户满意度 你有没有遇到过这样的情况&#xff1a;和AI聊着聊着&#xff0c;它突然忘了前面说过什么&#xff0c;答非所问&#xff0c;或者话题跳得毫无逻辑&#xff1f;用户在真实使用…

作者头像 李华
网站建设 2026/3/27 11:34:05

计算机小程序毕设实战-基于springboot+小程序的社区资产管理app设计与实现基于springboot+vue实现的数据资产管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/11 10:49:30

模型集成十年演进

模型集成&#xff08;Model Ensembling&#xff09; 的十年&#xff08;2015–2025&#xff09;&#xff0c;是从“投票与堆叠”向“权重融合&#xff08;Weight Merging&#xff09;”&#xff0c;再到“大模型协作体系&#xff08;Multi-Agent Collaboration&#xff09;”的…

作者头像 李华
网站建设 2026/3/17 6:31:30

oracle 19c创建CDB和非CDB模式

# 静默安装响应文件&#xff08;db_install.rsp&#xff09;核心配置 oracle.install.db.InstallEditionEE oracle.install.db.OSDBA_GROUPdba oracle.install.db.OSOPER_GROUPoper # 核心&#xff1a;决定CDB/非CDB模式 CREATE_AS_CDBYES # YESCDB&#xff0c;NO非CDB # 仅当…

作者头像 李华
网站建设 2026/3/13 8:30:00

2026年软件测试公众号热度内容全景解析

一、热度最高的三大内容类型及核心特征 2026年&#xff0c;软件测试公众号的爆款内容呈现高度专业化趋势&#xff0c;阅读量破万的文章集中于三类垂直领域&#xff0c;占比超80%&#xff0c;均以解决从业者实际痛点为驱动&#xff1a; AI与自动化测试工具评测 热度占比&#x…

作者头像 李华