当前位置: 首页 > news >正文

模型部署 - docker

docker简介

Docker 是一种开源的容器化平台,允许开发者将应用程序及其依赖项打包到一个标准化的单元中,称为“容器”。这些容器可以在任何支持 Docker 的系统上运行,无需担心环境差异。

为什么需要 Docker?

在传统的开发中,不同的系统和环境可能导致应用程序运行时出现问题。例如,你在自己的电脑上开发了一个应用程序,运行得很好,但是当你将它部署到服务器上时,却出现了错误。这通常是因为两者的环境配置不同。

Docker 通过容器化技术解决了这个问题。容器包含了应用程序的所有必要组件(如代码、运行时、库、环境变量等),所以无论你把容器运行在哪台机器上,它的行为都是一致的。
docker

Docker 的基本概念

  1. 镜像(Image): 镜像是一个只读的模板,包含了运行应用程序所需的一切。你可以把它看作是一个应用程序的快照。镜像可以从公共的 Docker Hub 上下载,也可以自己创建。

  2. 容器(Container): 容器是镜像的运行实例。你可以启动、停止、移动或删除容器,容器中的应用程序运行是隔离的,互不干扰。

  3. Dockerfile: 这是一个文本文件,定义了如何构建 Docker 镜像。你可以在 Dockerfile 中指定基础镜像、需要安装的依赖项、需要运行的命令等。

  4. Docker Hub: 这是一个公共的注册表,存储了大量预先构建好的镜像。你可以直接从 Docker Hub 上拉取镜像并运行。

Docker 的基本操作

  • 安装 Docker: 在 Linux、Windows 或 macOS 上安装 Docker 后,你可以通过命令行与 Docker 交互。

    sudo apt-get update
    sudo apt-get install -y docker.io
    
  • 运行容器: 你可以使用 docker run 命令运行一个容器。例如,运行一个简单的 Hello World 容器:

    docker run hello-world
    

    这个命令会从 Docker Hub 下载 hello-world 镜像,并在容器中运行它。运行成功后,你会看到容器输出 “Hello from Docker!” 的信息。

  • 构建镜像: 使用 Dockerfile,你可以构建自己的镜像。假设你有一个简单的 Python 应用程序,并且已经写好了 Dockerfile,你可以通过以下命令构建镜像:

    docker build -t my-python-app .
    

    这里的 -t 参数用于为镜像命名,my-python-app 是镜像的名称,. 表示 Dockerfile 所在的目录。

  • 查看正在运行的容器: 你可以使用 docker ps 查看当前正在运行的容器。

    docker ps
    
  • 停止容器: 使用 docker stop 命令可以停止一个运行中的容器。

    docker stop <container_id>
    

    <container_id> 是容器的唯一标识符,你可以通过 docker ps 命令获取。

  • 删除容器: 使用 docker rm 可以删除一个停止的容器。

    docker rm <container_id>
    

Docker 的优势

  • 环境一致性: 无论你在什么系统上运行 Docker 容器,应用程序的行为都是一致的。
  • 轻量级: Docker 容器共享主机操作系统的内核,启动速度快,资源消耗低。
  • 易于部署: 只需将镜像推送到 Docker Hub 或其他注册表,其他人就可以轻松拉取并运行你的应用。

如何将模型打包进docker

要在 Linux 上使用 Docker 部署大模型,涉及到将模型和其依赖项打包进 Docker 容器,然后在容器中运行模型服务。以下是完整的步骤,包含从环境准备到部署测试的详细流程。

1. 安装 Docker

首先,需要在 Linux 系统上安装 Docker。

# 更新系统的包列表
sudo apt-get update# 安装 Docker 及相关组件
sudo apt-get install -y docker.io# 启动 Docker 服务并设置为开机启动
sudo systemctl start docker
sudo systemctl enable docker

2. 安装 NVIDIA Docker(可选,如果使用 GPU 加速)

如果你的模型需要使用 GPU 加速,需要安装 NVIDIA Docker,以便在 Docker 容器中使用 GPU。

# 设置 NVIDIA Docker 仓库
distribution=$(. /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# 更新包列表并安装 nvidia-docker2
sudo apt-get update
sudo apt-get install -y nvidia-docker2# 重启 Docker 服务
sudo systemctl restart docker

3. 准备大模型及相关文件

确保你已经准备好了大模型文件、依赖项(如 requirements.txtenvironment.yml)、以及用于启动模型服务的脚本(如 app.py)。

示例 requirements.txt
numpy==1## 如何在linux上部署
在 Linux 上使用 Docker 部署大模型需要进行以下几个步骤。以下是详细的步骤说明:### 1. 安装 Docker
首先,需要在 Linux 系统上安装 Docker。```bash
# 更新系统的包列表
sudo apt-get update# 安装 Docker 及相关组件
sudo apt-get install -y docker.io# 启动 Docker 服务并设置为开机启动
sudo systemctl start docker
sudo systemctl enable docker

2. 安装 NVIDIA Docker(可选,如果使用 GPU 加速)

如果你的模型需要使用 GPU 加速,你需要安装 NVIDIA Docker 以便在 Docker 容器中使用 GPU。

# 设置 NVIDIA Docker 仓库
distribution=$(. /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# 更新包列表并安装 nvidia-docker2
sudo apt-get update
sudo apt-get install -y nvidia-docker2# 重启 Docker 服务
sudo systemctl restart docker

3. 创建 Dockerfile

Dockerfile 是定义 Docker 镜像构建过程的文件。你可以通过这个文件指定基础镜像、安装依赖库、复制模型文件等。

# 使用官方的深度学习基础镜像
FROM nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04# 安装 Python 和 pip
RUN apt-get update && apt-get install -y python3 python3-pip# 安装模型所需的 Python 库
COPY requirements.txt /app/requirements.txt
RUN pip3 install --no-cache-dir -r /app/requirements.txt# 复制模型文件到容器中
COPY model /app/model# 设置工作目录
WORKDIR /app# 定义运行命令(例如,启动模型服务)
CMD ["python3", "app.py"]

4. 构建 Docker 镜像

使用 Dockerfile 构建镜像。

# 在 Dockerfile 所在目录下执行
docker build -t my_large_model .

5. 运行 Docker 容器

使用构建好的 Docker 镜像运行容器。

# 如果需要 GPU 加速,使用 --gpus 参数
docker run --gpus all -d --name my_model_container -p 8080:8080 my_large_model

6. 测试模型服务

容器启动后,模型服务会在指定的端口(例如 8080)上运行。你可以通过以下命令查看容器的运行状态:

docker ps

然后,可以通过浏览器或 curl 命令访问模型服务:

curl http://localhost:8080/predict -d '{"input": "sample input data"}'

7. 管理和更新容器

  • 查看日志:
docker logs my_model_container
  • 停止容器:
docker stop my_model_container
  • 重启容器:
docker start my_model_container
  • 删除容器:
docker rm my_model_container

8. 备份和恢复模型

你可以将模型文件保存在外部卷中,以便在容器重新启动时保留数据:

docker run --gpus all -d --name my_model_container -p 8080:8080 -v /path/to/model:/app/model my_large_model

这样模型文件就会保存在宿主机的 /path/to/model 目录中,并映射到容器中的 /app/model 目录。

通过这些步骤,你可以在 Linux 上使用 Docker 部署并运行大模型。如果模型或应用程序需要更新,只需更新 Dockerfile 并重新构建和启动容器即可。
请添加图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 动态规划问题
  • 当前IT行业10大热门细分技术方向,哪一个更适合你?
  • 基于llama.cpp实现Llama3模型的guff格式转换、4bit量化以及GPU推理加速(海光DCU)
  • Nginx 配置文件中 location、proxy_pass最后的斜杠/作用
  • 仿RabbitMQ实现消息队列
  • 按图搜索的精准营销:基于拍立淘API返回值的用户画像
  • MySQL的基本语法记录
  • P1919 【模板】高精度乘法 | A*B Problem 升级版、P3803 【模板】多项式乘法(FFT)、P1595 信封问题(圆排列、错位排列)
  • 转行大模型成功进字节了!48k*15薪!
  • knowLedge-VueCLI项目中环境变量的定义与使用
  • 用C#实现连续打印pdf文件
  • 一起学习LeetCode热题100道(40/100)
  • LlamaIndex-milvus-RAG
  • 基于vue框架的yit商城uwd1i(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 【产品经理】竞品分析怎么理解?拆解一下
  • (三)从jvm层面了解线程的启动和停止
  • 4个实用的微服务测试策略
  • 77. Combinations
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript中的对象个人分享
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Next.js之基础概念(二)
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Object.assign方法不能实现深复制
  • Spring Boot MyBatis配置多种数据库
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • vue:响应原理
  • Zepto.js源码学习之二
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 配置 PM2 实现代码自动发布
  • 前嗅ForeSpider教程:创建模板
  • 数据可视化之 Sankey 桑基图的实现
  • 转载:[译] 内容加速黑科技趣谈
  • 仓管云——企业云erp功能有哪些?
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​​​​​​​​​​​​​​Γ函数
  • ​数据链路层——流量控制可靠传输机制 ​
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (06)金属布线——为半导体注入生命的连接
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (33)STM32——485实验笔记
  • (CPU/GPU)粒子继承贴图颜色发射
  • (TOJ2804)Even? Odd?
  • (二)windows配置JDK环境
  • (分布式缓存)Redis哨兵
  • (数据结构)顺序表的定义
  • *** 2003
  • *1 计算机基础和操作系统基础及几大协议
  • .net core 控制台应用程序读取配置文件app.config
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段
  • .NET正则基础之——正则委托