添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

目前,使用 docker 部署机器学习或深度学习模型正在成为企业大规模部署的一种常规操作。基于目前工作的情况,刚好可以使用现成的模型尝试使用 docker 进行部署。主要有以下

1. 什么是docker
2. 个性化环境的定制开发-Dockerfile的制作
3. docker常用命令
4. 模型部署

什么是docker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
它有以下几点优势:

  1. 更快速的交付和部署 ;Docker在整个开发周期都可以完美的辅助你实现快速交付。Docker允许开发者在装有应用和服务本地容器做开发。可以直接集成到可持续开发流程中。例如:开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
  2. 高效的部署和扩容 ;Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。Docker的兼容性和轻量特性可以很轻松的实现负载的动态管理。你可以快速扩容或方便的下线的你的应用和服务,这种速度趋近实时。
  3. 更高的资源利用率 ;Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
  4. 更简单的管理 ;使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

个性化环境的定制开发-Dockerfile的制作

针对常见业务场景,每个人电脑开发的开发环境都不一样,要不就是python版本不一样,要不就是TensorFlow版本不一样,避免出现我的代码只能在自己机器上跑的尴尬局面出现,因此建立一个统一的开发部署环境就成为必然。Dockerfile正是为此而诞生。Dockerfile的常用命令有以下几种

  1. FROM ,获取基础镜像
  2. COPY ,复制本机文件到docker容器的指定目录中
  3. ADD ,复制(并解压)文件到docker容器的指定目录中
  4. RUN ,运行linux命令,用于创建必要的开发环境
  5. WORKDIR ,设置工作目录
  6. ENV ,
  7. USER

其他的一些如EXPOSE,LABEL,STOPSIGNAL,VOLUME等命令在现阶段还没用上。
目前自己的定制化Dockerfile如下

# base image
FROM ubuntu:18.04
# MAINTAINER
# 安装相应依赖
RUN apt-get update \
    && apt-get install wget curl vim gcc zlib1g-dev bzip2 -y \
    && apt-get install zlib1g.dev \
    # 安装libssl1.0-dev解决pip安装时md5模块无法导入问题
    && apt-get install openssl libssl1.0-dev -y \
    && apt-get install g++ build-essential -y \
    # && apt-get install python-tk -y \
    # && apt-get install tk-dev -y \
    && mkdir /usr/local/source \
# 设置工作目录
WORKDIR /usr/local/source
RUN wget https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz \
    && tar xvf Python-2.7.12.tgz && cd Python-2.7.12 \
    && ./configure --prefix=/usr/local/python27 && make && make altinstall \
    # 备份旧版本
    && mv /usr/bin/python /usr/bin/python27_old \
    # 配置默认python
    && ln -s /usr/local/python27/bin/python /usr/bin/python \
    && ln -s /usr/local/python27/bin/python-config /usr/bin/python-config \
    # 下载安装pip
    && curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py \
    && python get-pip.py \
    # 备份旧pip
    # && mv /usr/bin/pip /usr/bin/pip_old 
    # 建立连接
    && ln -s /usr/local/python27/bin/pip  /usr/bin/pip \
    # 安装包
    && cd /usr/local/source \ 
    && pip install Cython==0.29.7 \
    && pip install pyyaml==5.1 \
    && pip install numpy==1.16.3 \
    && pip install pandas==0.23.2 \
    && pip install scipy==1.2.1 \
    && pip install scikit-learn==0.20.3 \
    && pip install matplotlib==2.1.0 \
    && pip install lightgbm==2.2.2 \
    && pip install catboost==0.13.1 \
    && pip install grpcio==1.20.1 \
    && pip install grpcio-tools==1.20.1 \

docker常用命令

Dockerfile制作完成后,就可以使用以下命令创建一个docker镜像

sudo docker build -it mydocker:v1 .  /bin/bash

请记住末尾有个 .(空格+.),后面/bin/bash的目的是镜像创建后直接开启一个并进入容器,进入命令行模式。
我们可以从主机复制东西到容器中,或者从容器复制东西到主机中,使用下列命令

sudo docker cp 主机文件路径 容器ID:容器路径     ## 从主机复制文件到容器
docker cp 容器ID:要拷贝的文件在容器里面的路径       要拷贝到宿主机的相应路径 

其他常用命令

docker images    ## 查看本机镜像
docker image ls  ## 查看本机镜像
docker ps -a     ## 查看本机创建的所有容器
docker rmi 镜像ID(或镜像名称标签)   ## 删除镜像
docker rm 容器ID  ## 删除容器

先这些,想到再加,不懂的google或看官网文档

既然容器环境已经创建好了,那就需要把模型文件拷贝进容器,为了部署方便,创建Dockerfile的时候也可以直接把模型复制进去(导致的后果就是镜像过大,占用过多的空间)。为了调用模型,除了基本的调用API接口外,还需要额外包装一层通信网络层,基本过程就是外部或其他容器发送请求数据给模型容器,模型容器接受到数据后,进行基本的特征工程和预测服务后,返回给发送端预测结果。本人在项目中,先后调研并测试过现成的rpc框架,分别是以下三种

  1. zerorpc,Python第三方开源库,安装简单,使用方便,缺点是速度慢,对于性能要求不高的可以尝试
  2. Thrift,Facebook开源RPC框架,使用稍微复杂,支持跨语言传输,速度快,在测试过程中发现数据的传输不是随着数据量的递增呈线性增长,而是指数增长,适用于单次数据量较少的情况
  3. grpc,Google开源RPC框架,使用方法和难度和Thrift一样,速度比Thrift慢,也支持跨多种语言传输,因为TensorFlow生态支持grpc,所以最后在性能满足要求的情况下,选择了grpc

上诉两种大公司的开源RPC框架都需要自定义传输数据格式,并使用其特定的编译器生成接口文件,调用这些接口函数即可,并以此创建自己的API接口,完成数据预处理、特征工程、模型预测服务。所有这些注意性能的变化。
关于Thriftgrpc框架的使用后期再来做个总结。

实际工作中,许多项目开发需要在Linux服务器上进行,本文为习惯使用 Windows 操作系统的朋友介绍一种基于Docker的,跨平台、便携性(方便移植、重新部署、可远程访问)的开发环境搭建方法。 模型部署是指将大模型运行在专属的计算资源上,使模型在独立的运行环境中高效、可靠地运行,并为业务应用提供推理服务。其目标是将机器学习模型应用于实际业务中,使最终用户或系统能够利用模型的输出,从而发挥其作用。import ioimport flask # 自己安装# 初始Flask appapp = flask.Flask(__name__) # #创建一个新的Flask应用程序实例。 要在 Linux 上使用 Docker 部署模型,涉及到将模型和其依赖项打包进 Docker 容器,然后在容器中运行模型服务。通过这些步骤,你可以在 Linux 上使用 Docker 部署并运行大模型。如果你的模型需要使用 GPU 加速,你需要安装 NVIDIA Docker 以便在 Docker 容器中使用 GPU。如果你的模型需要使用 GPU 加速,需要安装 NVIDIA Docker,以便在 Docker 容器中使用 GPU。容器启动后,模型服务会在指定的端口(例如 8080)上运行。 1. 背景介绍 随着机器学习深度学习技术的快速发展,越来越多的企业和开发者开始将这些技术应用于实际项目中。然而,在部署机器学习服务时,往往会遇到各种环境配置、依赖管理和版本控制等问题。为了解决这些问题,Docker作为一种轻量级的容器技术,为部署机器学习服务提供了便捷的解决方案。 本文将详细介绍如何使用Docker部署机器学习服务,包括核心概念、算法原理、具体操作步骤、最佳实践、实际应用场景... 比如我有一个目标检测的项目,我想分享给朋友,那么他首先需要在自己的电脑上配置好显卡驱动、CUDA、CuDNN,在拿到我的项目后,还需要安装各种依赖库,最后代码还不一定跑起来。​ 在这个命令中,run是创建容器的指令,-it是交互式终端,因为创建的容器就相当于一个本机中的linux服务器,我们可以通过终端与容器交互。Docker容器通常是一个Linux容器,基于Docker镜像被创建,一个运行中的容器是一个运行在Docker主机上的进程,但和主机及所有在主机上的其他进程是隔离的。 文章目录配置(一)本地部署1)准备训练好的weights文件或者model文件(硬盘里2)定义图结构后+load_weights,或者load_model直接一起加载3)预测1. **直接预测**2. 使用docker部署(二)服务器部署(1)模型环境配置(2)**python+spyne远程数据预处理** (1)Docker安装+WSL2 首先需要开启Hyper-V(win10家庭版没有自己安装) https://www.jb51.net/article/182013.htm 安装docker 使用 Docker 容器来开发机器学习模型的好处有很多。近日,GitHub 的资深机器学习科学家 Hamel Husain 在 Towards Data Science 上发表了一篇入门级的 Docker 容器教程,文章从基本的概念谈起,清楚明白地介绍了 Docker 容器的一些基本的操作方式和注意事项。 Docker 是什么? 你可以把 Docker 看作是轻量级的虚拟机——包含你运 1.背景介绍 随着人工智能技术的快速发展,机器学习深度学习模型已经成为了企业和组织中的核心组件。这些模型需要在大规模的数据集上进行训练和部署,以实现高效的预测和推理能力。因此,模型部署的技术成为了关键的一环。 容器和微服务架构是当今最流行的软件架构之一,它们为模型部署提供了强大的灵活性和可扩展性。容器可以帮助我们将模型打包成独立的容器,并在任何支持容器的环境中运行。而微服务架构则可以帮助... 容器部署提供了显著的优势,特别是在需要跨多个环境一致性部署、未来有扩展需求、或者想要利用微服务架构的优势时。容器技术已经成为现代软件开发和部署不可或缺的一部分,它通过提供一种轻量级、可移植的方式来打包和运行应用,极大地提高了应用部署的速度、可靠性和可伸缩性。本文将探讨容器部署的优势、劣势以及在不同场景下的应用,特别是在Windows环境下的实践。这些工具和平台支持从开发、测试到生产环境中的应用容器,特别适合微服务架构、多语言应用开发以及需要在多个环境中保持一致性的场景。