M2LOrder模型Ubuntu 20.04系统部署全指南:从安装到模型服务上线
M2LOrder模型Ubuntu 20.04系统部署全指南从安装到模型服务上线最近有不少朋友在问怎么在Ubuntu系统上把M2LOrder模型跑起来。这个模型在订单处理、文档理解方面挺厉害的但部署过程对新手来说可能有点绕。我自己在Ubuntu 20.04上折腾了几次踩过一些坑也总结了一套比较顺滑的流程。今天我就把从零开始一直到模型服务上线的完整步骤分享给你。你不用有太深的系统管理经验跟着步骤一步步来基本上都能搞定。我们会从最基础的系统安装讲起一直到通过星图GPU平台一键部署镜像并测试服务整个过程都尽量用大白话说明。1. 准备工作与环境确认在开始动手之前我们先看看需要准备些什么。这就像做饭前要先备好菜和调料一样准备工作做好了后面操作会顺利很多。首先你需要一台有NVIDIA显卡的电脑或服务器。M2LOrder模型对GPU有要求用CPU跑会非常慢基本没有实用价值。显卡型号最好是RTX 20系列或更新显存建议8GB以上。系统方面我们选择Ubuntu 20.04 LTS。这是个长期支持版本比较稳定社区支持也好遇到问题容易找到解决方案。如果你已经装了其他版本的Ubuntu大部分步骤也适用但可能会有细微差别。还需要一个能正常访问的网络环境因为过程中要下载不少软件包和模型文件。建议准备至少50GB的可用磁盘空间系统本身、驱动、Docker、模型文件加起来会占用不少空间。最后给自己预留2-3个小时的完整时间。部署过程需要多次重启和等待下载中间被打断的话可能要重来某些步骤。2. Ubuntu 20.04系统安装与基础配置如果你已经装好了Ubuntu 20.04可以跳过这一节直接看下一节。如果是全新安装跟着下面的步骤走。2.1 制作安装U盘与启动安装首先到Ubuntu官网下载20.04 LTS的ISO镜像文件。然后用RufusWindows或EtchermacOS/Linux把这个镜像写到U盘里做成启动盘。把U盘插到要安装的电脑上开机时按F12、F2或Delete键不同电脑按键不同进入启动菜单选择从U盘启动。你会看到Ubuntu的安装界面。安装过程中有几个关键选择需要注意语言选择英文或中文都可以我建议选英文因为后面有些命令行报错信息是英文的保持一致比较好排查问题。安装类型选“正常安装”把“安装Ubuntu时下载更新”这个勾去掉可以加快安装速度更新我们后面单独做。磁盘分区如果你不熟悉就用默认的“擦除磁盘并安装Ubuntu”它会自动处理好一切。设置用户名、密码和计算机名记住这些信息后面登录要用。安装过程大概20-30分钟完成后系统会提示重启。拔掉U盘按提示重启进入新系统。2.2 系统基础设置与更新第一次进入系统我们先做几个基础设置。打开“软件和更新”在“Ubuntu软件”标签页里把“main”、“universe”、“restricted”、“multiverse”四个源都勾选上。这样软件库更全。然后打开终端CtrlAltT我们开始更新系统。逐条执行下面的命令sudo apt update sudo apt upgrade -y sudo apt dist-upgrade -y第一条命令是更新软件包列表第二条是升级所有可升级的软件包第三条是处理版本升级时的依赖关系。这个过程可能需要下载几百MB的数据时间取决于你的网速。更新完成后建议重启一次系统让所有更新生效sudo reboot重启后我们安装一些后续会用到的工具软件sudo apt install -y curl wget git vim net-toolscurl和wget用于下载文件git用于克隆代码仓库vim是文本编辑器如果你习惯nano也可以装nanonet-tools包含一些网络诊断工具。3. NVIDIA GPU驱动安装与验证这是比较关键的一步驱动没装好后面的Docker GPU支持就没法用。Ubuntu 20.04自带的nouveau开源驱动对深度学习支持不好我们需要安装官方的NVIDIA驱动。3.1 禁用nouveau驱动先禁用系统自带的nouveau驱动。打开终端创建配置文件sudo vim /etc/modprobe.d/blacklist-nouveau.conf在文件里添加这两行内容blacklist nouveau options nouveau modeset0保存退出后更新initramfssudo update-initramfs -u然后重启系统sudo reboot重启后可以验证nouveau是否被禁用。执行lsmod | grep nouveau如果没有任何输出说明禁用成功了。3.2 安装NVIDIA驱动Ubuntu 20.04提供了比较方便的驱动安装方式。打开“软件和更新”切换到“附加驱动”标签页。系统会自动检测你的显卡型号并列出可用的驱动版本。建议选择带有“proprietary, tested”标注的版本这是经过测试的专有驱动比较稳定。通常选择最新的驱动版本就行比如nvidia-driver-550。选中后点击“应用更改”系统会自动下载并安装。安装过程可能需要10-20分钟完成后会提示重启。重启后打开终端验证驱动是否安装成功nvidia-smi你应该能看到一个表格显示你的GPU型号、驱动版本、CUDA版本等信息。如果看到这个表格说明驱动安装成功了。如果提示命令未找到可能是驱动没装好需要回到“附加驱动”重新选择安装。3.3 安装CUDA Toolkit虽然M2LOrder模型可能不直接需要完整的CUDA但很多深度学习框架依赖CUDA环境。我们安装CUDA 11.8这是个比较兼容的版本。到NVIDIA官网找到CUDA 11.8的下载页面选择Linux - x86_64 - Ubuntu - 20.04 - runfile(local)。复制下载链接在终端里用wget下载wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run下载完成后运行安装程序sudo sh cuda_11.8.0_520.61.05_linux.run安装过程中注意几个选择接受许可协议取消勾选Driver因为我们已经装了驱动其他选项保持默认安装完成后需要配置环境变量。编辑你的bash配置文件vim ~/.bashrc在文件末尾添加export PATH/usr/local/cuda-11.8/bin${PATH::${PATH}} export LD_LIBRARY_PATH/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH::${LD_LIBRARY_PATH}}保存退出后让配置生效source ~/.bashrc验证CUDA安装nvcc --version这会显示CUDA编译器的版本信息。再验证一下CUDA样例是否能编译cd /usr/local/cuda-11.8/samples/1_Utilities/deviceQuery sudo make ./deviceQuery如果看到“Result PASS”说明CUDA环境配置正确。4. Docker环境安装与配置现在我们来安装Docker。Docker可以帮我们创建隔离的环境避免不同项目的依赖冲突也方便迁移和部署。4.1 安装Docker CE首先卸载旧版本的Docker如果有的话sudo apt remove docker docker-engine docker.io containerd runc更新apt包索引并安装必要的依赖sudo apt update sudo apt 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 [archamd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable现在可以安装Docker了sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io安装完成后启动Docker服务并设置开机自启sudo systemctl start docker sudo systemctl enable docker验证Docker是否安装成功sudo docker run hello-world如果看到“Hello from Docker!”的消息说明Docker安装正确。4.2 配置Docker用户组与GPU支持默认情况下运行Docker命令需要sudo权限。为了方便我们把当前用户加入docker组sudo usermod -aG docker $USER重要这个更改需要重新登录才能生效。你可以注销再登录或者打开新的终端窗口。接下来安装NVIDIA Docker工具包让Docker容器能使用GPUdistribution$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt update sudo apt install -y nvidia-docker2 sudo systemctl restart docker测试GPU支持是否正常docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu20.04 nvidia-smi你应该能看到和在宿主机上运行nvidia-smi类似的输出显示GPU信息。5. 模型环境准备与依赖安装基础环境都搭好了现在我们来准备M2LOrder模型运行需要的具体环境。5.1 创建项目目录与获取模型首先创建一个工作目录mkdir ~/m2lorder_project cd ~/m2lorder_projectM2LOrder模型的具体获取方式取决于它的发布形式。如果是开源模型通常可以从GitHub克隆git clone 模型仓库地址如果模型是私有或需要申请请按照提供方的说明获取模型文件。一般来说你会得到一个包含模型权重文件通常是.pth、.bin或.safetensors格式和推理代码的目录。假设模型目录结构是这样的m2lorder_model/ ├── config.json ├── model.safetensors ├── special_tokens_map.json ├── tokenizer.json ├── tokenizer_config.json └── inference.py5.2 创建Dockerfile为了确保环境一致性我们创建一个Dockerfile来定义模型运行环境。在项目根目录创建Dockerfilevim Dockerfile内容如下FROM nvidia/cuda:11.8.0-runtime-ubuntu20.04 # 设置环境变量 ENV DEBIAN_FRONTENDnoninteractive ENV PYTHONUNBUFFERED1 # 安装系统依赖 RUN apt-get update apt-get install -y \ python3.8 \ python3-pip \ python3.8-venv \ git \ wget \ curl \ rm -rf /var/lib/apt/lists/* # 设置Python3.8为默认 RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1 # 创建工作目录 WORKDIR /app # 复制模型文件 COPY m2lorder_model /app/model # 复制依赖文件 COPY requirements.txt /app/ # 安装Python依赖 RUN pip3 install --no-cache-dir -r requirements.txt # 暴露端口 EXPOSE 8000 # 启动命令 CMD [python3, /app/model/inference.py, --host, 0.0.0.0, --port, 8000]5.3 创建依赖文件创建requirements.txt列出模型需要的Python包vim requirements.txt内容根据模型实际需要来定通常包括torch2.0.0 transformers4.30.0 accelerate0.20.0 safetensors0.3.0 fastapi0.100.0 uvicorn0.23.0 pydantic2.0.0 pillow10.0.0 numpy1.24.05.4 创建推理服务脚本如果模型仓库里没有inference.py我们需要创建一个简单的FastAPI服务。在模型目录下创建vim ~/m2lorder_project/m2lorder_model/inference.py基本内容如下from fastapi import FastAPI, UploadFile, File from pydantic import BaseModel from typing import Optional import torch from transformers import AutoModelForSequenceClassification, AutoTokenizer import uvicorn import json import logging # 设置日志 logging.basicConfig(levellogging.INFO) logger logging.getLogger(__name__) # 定义请求模型 class OrderRequest(BaseModel): text: str max_length: Optional[int] 512 # 初始化模型和tokenizer logger.info(正在加载模型和分词器...) model_path /app/model try: tokenizer AutoTokenizer.from_pretrained(model_path) model AutoModelForSequenceClassification.from_pretrained(model_path) model.eval() logger.info(模型加载成功) except Exception as e: logger.error(f模型加载失败: {e}) raise # 创建FastAPI应用 app FastAPI(titleM2LOrder模型服务, version1.0.0) app.get(/) async def root(): return {message: M2LOrder模型服务运行中, status: healthy} app.post(/predict) async def predict(order_request: OrderRequest): try: # 预处理文本 inputs tokenizer( order_request.text, truncationTrue, paddingTrue, max_lengthorder_request.max_length, return_tensorspt ) # 推理 with torch.no_grad(): outputs model(**inputs) predictions torch.nn.functional.softmax(outputs.logits, dim-1) # 获取结果 predicted_class torch.argmax(predictions, dim-1).item() confidence predictions[0][predicted_class].item() return { text: order_request.text, predicted_class: predicted_class, confidence: float(confidence), probabilities: predictions.tolist()[0] } except Exception as e: logger.error(f推理失败: {e}) return {error: str(e), status: failed} app.get(/health) async def health_check(): return {status: healthy, model_loaded: True} if __name__ __main__: import sys host 0.0.0.0 port 8000 if len(sys.argv) 1: for arg in sys.argv[1:]: if arg.startswith(--host): host arg.split()[1] elif arg.startswith(--port): port int(arg.split()[1]) uvicorn.run(app, hosthost, portport)6. 本地构建与测试在推到星图平台之前我们先在本地构建和测试确保一切正常。6.1 构建Docker镜像在项目根目录执行docker build -t m2lorder-model:latest .这个过程会下载基础镜像并安装所有依赖可能需要10-30分钟取决于你的网速。构建完成后可以查看镜像列表docker images | grep m2lorder6.2 运行容器并测试运行容器映射端口到宿主机docker run -d --gpus all -p 8000:8000 --name m2lorder-service m2lorder-model:latest查看容器日志确认服务启动正常docker logs m2lorder-service你应该看到类似这样的输出INFO: Started server process [1] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000现在可以测试服务了。打开另一个终端用curl测试curl http://localhost:8000/应该返回{message:M2LOrder模型服务运行中,status:healthy}测试健康检查接口curl http://localhost:8000/health测试推理接口用一个示例订单文本curl -X POST http://localhost:8000/predict \ -H Content-Type: application/json \ -d {text: 订单号20240115001商品笔记本电脑数量1台金额8999元收货人张三, max_length: 512}如果一切正常你会得到一个JSON响应包含预测的类别和置信度。6.3 停止和清理本地容器测试完成后停止并删除容器docker stop m2lorder-service docker rm m2lorder-service7. 星图GPU平台一键部署本地测试通过后我们就可以把镜像推到星图GPU平台利用平台的GPU资源提供服务了。7.1 准备镜像推送首先登录到星图平台的容器镜像仓库。你需要先在星图平台注册账号并创建镜像仓库。假设你的仓库地址是registry.cn-hangzhou.aliyuncs.com/your-namespace/m2lorder-model。给本地镜像打标签docker tag m2lorder-model:latest registry.cn-hangzhou.aliyuncs.com/your-namespace/m2lorder-model:latest登录到镜像仓库docker login registry.cn-hangzhou.aliyuncs.com输入你的用户名和密码在星图平台获取。推送镜像docker push registry.cn-hangzhou.aliyuncs.com/your-namespace/m2lorder-model:latest推送时间取决于镜像大小和网络速度通常需要几分钟到十几分钟。7.2 在星图平台创建服务登录星图GPU平台进入“容器服务”或“AI应用”页面点击“创建应用”。填写应用基本信息应用名称m2lorder-service镜像地址填写你刚才推送的镜像地址端口映射容器端口8000服务端口可以设为8000或其他可用端口GPU资源选择适合的GPU规格根据模型大小和预期并发量决定内存和CPU建议内存至少8GBCPU 2核以上在环境变量部分可以根据需要添加CUDA_VISIBLE_DEVICES0如果有多卡指定使用哪张卡PYTHONUNBUFFERED1MODEL_PATH/app/model在健康检查配置中设置健康检查路径/health检查间隔30秒超时时间5秒点击创建平台会自动拉取镜像并启动容器。等待几分钟直到服务状态变为“运行中”。7.3 测试线上服务服务启动后平台会分配一个访问地址通常是http://服务IP:端口或一个域名。用同样的方法测试线上服务curl http://你的服务地址:端口/ curl http://你的服务地址:端口/health curl -X POST http://你的服务地址:端口/predict \ -H Content-Type: application/json \ -d {text: 测试订单内容, max_length: 512}如果测试通过恭喜你M2LOrder模型服务已经成功上线了8. 总结走完这一整套流程从裸机Ubuntu系统到模型服务上线确实需要一些耐心。但每一步都有它的意义系统安装是基础GPU驱动让硬件能发挥作用Docker提供了环境一致性本地测试确保代码没问题最后星图平台部署让服务能稳定运行。实际用下来Ubuntu 20.04的稳定性确实不错配合Docker的环境隔离模型服务跑起来比较省心。星图平台的一键部署功能对团队协作特别友好不用每个人都在本地配环境。如果你在部署过程中遇到问题有几个排查思路先看日志Docker日志和模型服务日志通常会有错误信息确保每一步都验证通过比如nvidia-smi要能正常显示网络问题有时候会影响镜像拉取可以尝试换源或检查网络配置。这套流程不仅适用于M2LOrder模型其他类似的深度学习模型部署也可以参考。关键是把环境做干净依赖理清楚测试做充分。希望这个指南能帮你少走些弯路顺利把模型服务跑起来。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。