Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >深度学习Tensorflow生产环境部署(上·环境准备篇)

深度学习Tensorflow生产环境部署(上·环境准备篇)

作者头像
用户1154259
发布于 2019-01-07 08:17:09
发布于 2019-01-07 08:17:09
2.1K01
代码可运行
举报
运行总次数:1
代码可运行

最近在研究Tensorflow Serving生产环境部署,尤其是在做服务器GPU环境部署时,遇到了不少坑。特意总结一下,当做前车之鉴。

1 系统背景

系统是ubuntu16.04

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ubuntu@ubuntu:/usr/bin$ cat /etc/issue
Ubuntu 16.04.5 LTS \n \l

或者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ubuntu@ubuntu:/usr/bin$ uname -m && cat /etc/*release
x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.5 LTS"
NAME="Ubuntu"
VERSION="16.04.5 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.5 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

显卡是Tesla的P40

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ubuntu@ubuntu:~$ nvidia-smi
Thu Jan  3 16:53:36 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.130                Driver Version: 384.130                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P40           Off  | 00000000:3B:00.0 Off |                    0 |
| N/A   34C    P0    49W / 250W |  22152MiB / 22912MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0    108329      C   python                                      4963MiB |
|    0    133840      C   tensorflow_model_server                    17179MiB |
+-----------------------------------------------------------------------------+

TensorFlow则是当下最新的1.12.0版本。

2 背景知识

在介绍如何部署之前,先来了解一下相关的概念。

2.1 TensorFlow Serving

参考资料

TensorFlow Serving是google提供的一种生产环境部署方案,一般来说在做算法训练后,都会导出一个模型,在应用中直接使用。

正常的思路是在flask这种web服务中嵌入tensorflow的模型,提供rest api的云服务接口。考虑到并发高可用性,一般会采取多进程的部署方式,即一台云服务器上同时部署多个flask,每个进程独享一部分GPU资源,显然这样是很浪费资源的。

Google提供了一种生产环境的新思路,他们开发了一个tensorflow-serving的服务,可以自动加载某个路径下的所有模型,模型通过事先定义的输入输出和计算图,直接提供rpc或者rest的服务。

  • 一方面,支持多版本的热部署(比如当前生产环境部署的是1版本的模型,训练完成后生成一个2版本的模型,tensorflow会自动加载这个模型,停掉之前的模型)。
  • 另一方面,tensorflow serving内部通过异步调用的方式,实现高可用,并且自动组织输入以批次调用的方式节省GPU计算资源。

因此,整个模型的调用方式就变成了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
客户端 ----> web服务(flask或者tornado) --grpc或者rest--> tensorflow serving

如果我们想要替换模型或者更新版本,只需要训练模型并将训练结果保存到固定的目录下就可以了。

2.2 Docker

参考资料:

docker简单来说就是一种容器技术,如果有做过技术支持的朋友肯定了解安装软件的痛苦——各种系统环境,导致各种安装报错...docker解决的问题就是,只要你再服务器上安装上docker,那么它会自动屏蔽所有的硬件信息,拉取一个镜像,就能直接启动提供服务。

搭建docker也很简单,如果是mac直接下载dmg文件就可以双击运行;如果是ubuntu直接运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get install docker

不过Ubuntu安装后只能通过root使用,如果想让其他用户使用,需要调整docker组,细节百度一下即可。

常用的命令也比较少:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看当前部署的服务
docker ps 
# 运行一个容器服务
docker run
# 删除一个服务
docker kill xxx

2.3 Nvidia-docker

参考资料:

因为docker是虚拟在操作系统之上的,屏蔽了很多底层的信息。如果想使用显卡这种硬件,一种思路是docker直接把操作系统上的驱动程序和算法库映射到容器内,但是这样就丧失了可移植性。

另一种方法就是在docker启动的时候挂载一个类似驱动的插件——这就是nvidia-docker的作用。

总的来说,如果想要在docker中使用tensorflow-gpu,需要首先安装docker-ce(社区版,其他版本nvidia-docker不一定支持),然后安装nvidia-container-runtime,最后安装nvidia-docker2。

当使用的时候,需要直接指定nvidia-docker2运行, 如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo nvidia-docker run -p 8500:8500 --mount type=bind,source=/home/ubuntu/data/east_serving/east_serving,target=/models/east -e MODEL_NAME=east -t tensorflow/serving:1.12.0-gpu &

3 部署实战

下面就进入部署的实战篇了:

3.1 Docker\Nvidia-Docker、Tensorflow部署

主要参考:

首先安装docker-ce:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
sudo service docker restart

如果之前安装了nvidia-docker1需要删除掉:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker

修改docker的镜像地址vi /etc/docker/daemon.json

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "registry-mirrors":["https://registry.docker-cn.com","http://hub-mirror.c.163.com"]
}

然后重启docker配置服务systemctl restart docker.service

更新nvidia-docker地址:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

执行安装命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ubuntu@ubuntu:~$ sudo nvidia-docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
Thu Jan  3 09:52:06 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.130                Driver Version: 384.130                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P40           Off  | 00000000:3B:00.0 Off |                    0 |
| N/A   35C    P0    49W / 250W |  22152MiB / 22912MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

可以看到,已经能再docker内部看到显卡的使用信息了。

在docker容器外,执行nvidia-smi可以看到有个tensorflow serving的服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ubuntu@ubuntu:~$ nvidia-smi
Thu Jan  3 17:52:43 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.130                Driver Version: 384.130                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P40           Off  | 00000000:3B:00.0 Off |                    0 |
| N/A   35C    P0    49W / 250W |  22152MiB / 22912MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0    108329      C   python                                      4963MiB |
|    0    133840      C   tensorflow_model_server                    17179MiB |
+-----------------------------------------------------------------------------+

注意正常需要配置docker占用的显存比例!

4 总结

深度学习还是需要全栈基础的,涉及到各种linux底层动态库、硬件、容器等等相关的知识,虽然踩了不少坑,但是很多概念性的东西都得到了实践,这才是工作最大的意义。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-01-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于 Docker 的深度学习环境:入门篇
这段时间,不论是 NLP 模型,还是 CV 模型,都得到了极大的发展。有不少模型甚至可以愉快的在本地运行,并且有着不错的效果。所以,经常有小伙伴对于硬件选择,基础环境准备有这样、那样的问题。
soulteary
2023/03/22
1.7K0
Docker: Nvidia Driver, Nvidia Docker 推荐安装步骤
最后, sudo reboot 重启。之后,运行 nvidia-smi 输出 Nvidia 驱动信息:
GoCoding
2021/05/06
1.5K0
使用Docker安装TensorFlow ,并设置GPU/CPU支持
一、Ubunutu20.4系统设置root登录及密钥登录 1、进入服务器主界面,将系统更换为Ubuntu20.4 https://console.cloud.tencent.com/cvm/insta
用户5481900
2022/05/26
1.9K0
Win10下配置WSL2使用CUDA搭建深度学习环境
操作系统:Windows 10 专业版 22H2(保系统版本高于windows10 21H2或Windows11)
御坂妹
2024/11/04
1.9K0
在Google Colab上学习Tensorflow
挂载Google云端硬盘 from google.colab import drive import os drive.mount('/content/drive') data_dir = 'drive/My Drive/dataset-resized' output_dir = 'drive/My Drive/out_put' logs = 'drive/My Drive/logs' os.listdir(data_dir) Drive already mounted at /content/drive
Spaceack
2020/11/04
9470
百万级类别的分类模型的拆分训练
很多人脸识别算法都是以分类的方式进行训练的,分类的训练方式中存在一个很大的问题,就是模型的最后一个全连接层的参数量太大了,以512为特征为例:
带萝卜
2020/10/26
1.1K0
玩转 AIGC:打造 AI 大模型云主机,Ubuntu 24.04 LTS 安装 Docker 和 NVIDIA Container Toolkit
今天分享的内容是 玩转 AIGC「2024」 系列文档中的 打造本地 AI 大模型地基,Ubuntu 24.04 LTS 安装 Docker 和 NVIDIA Container Toolkit。
运维有术
2024/05/07
1.2K0
玩转 AIGC:打造 AI 大模型云主机,Ubuntu 24.04 LTS 安装 Docker 和 NVIDIA Container Toolkit
cuDNN installation
NVIDIA cuDNNis a GPU-accelerated library of primitives for deep neural networks.
vanguard
2021/08/30
1.2K0
深度总结,带你玩转 NVIDIA GPU
大家好,我是三十一[0],最近北京也出现疫情了,昨晚公司大楼临时管控,测核酸折腾到小一点才到家。前两天的抢菜、囤菜,加上这次的管控经历,这次真有些慌了。。。
程序员荒生
2022/05/19
1.4K0
巧用 Docker Compose 管理 GPU 资源
在面向 AI 开发的大趋势下,容器化可以将环境无缝迁移,将配置环境的成本无限降低。但是,在容器中配置 CUDA 并运行 TensorFlow 一段时间内确实是个比较麻烦的时候,所以我们这里就介绍和使用它。
iMike
2021/04/30
7.1K0
Ubuntu 16.04安装 cuda 9.2
0x00 前言 之前在Ubuntu 16.04上安装了[cuda 9.1],工作也很正常。但是,后来莫名奇妙就出问题了,重装cuda之后还总是进不了系统。因此,寻找到了以下优化的安装方法。 0x01 安装步骤 主要优化点:将之前使用cuda中自带的GPU驱动改为手动安装。 以下操作都在root权限下执行: 1、 安装GPU驱动 更新源 add-apt-repository ppa:graphics-drivers/ppa apt update 检查当前最佳驱动版本 root@vm:~# ubuntu-dri
drunkdream
2018/07/06
2.2K0
KubeSphere 最佳实战:openEuler 22.03 LTS SP3 安装 NVIDIA 显卡驱动
今天分享的内容是 KubeSphere 最佳实战「2024」 系列文档中的 openEuler 22.03 LTS SP3 安装 NVIDIA 显卡驱动。
运维有术
2024/05/23
7080
KubeSphere 最佳实战:openEuler 22.03 LTS SP3 安装 NVIDIA 显卡驱动
docker19.03使用NVIDIA显卡
2019年7月的docker 19.03已经正式发布了,这次发布对我来说有两大亮点。 1,就是docker不需要root权限来启动喝运行了 2,就是支持GPU的增强功能,我们在docker里面想读取nvidia显卡再也不需要额外的安装nvidia-docker了
张琳兮
2019/09/16
6.8K0
RTX4060+ubuntu22.04.3+cuda12.2安装验证
这款笔记本电脑因为触摸板驱动限制,需要选择ubuntu22.04.3以上版本;而RTX4060+cuda限制需要选择ubuntu22.04.3版本,更新版本的cuda并非一定不能使用,而是官方文档验证过的是此版本。
tankaro
2025/05/24
1660
kyc容器使用GPU配置
部署KYC人脸对比服务,需要GPU支持,生产环境都是容器,所以就需要捣鼓下docker如何支持GPU。
行 者
2023/10/20
3610
『开发技术』Ubuntu与Windows如何查看CPU&GPU&内存占用量
在使用Ubuntu或者Windows执行一些复杂数据运算时,需要关注下CPU、GPU以及内存占用量,如果数据运算超出了负荷,会产生难以预测的错误。本文将演示如何用简单地方式,实时监控Ubuntu或者Windows的CPU、GPU以及内存占用量,教会大家如何实时监控电脑状态。
小宋是呢
2022/03/07
3.9K0
『开发技术』Ubuntu与Windows如何查看CPU&GPU&内存占用量
启用Docker虚拟机GPU,加速深度学习
首先说一下Docker虚拟机。为什么需要虚拟机?不知道你是否有过这样的经历,在github上看到一个有趣的开源项目,把代码下载下来,按照项目上的说明编译运行,结果发现怎么也不能成功。
云水木石
2019/07/01
2.7K0
启用Docker虚拟机GPU,加速深度学习
通过Docker部署深度学习项目环境
深度学习环境部署的方法有很多种,其中Docker化深度学习环境和项目是一个很不错的选择。这里写过一些深度学习主机安装和部署的文章,这篇文章记录一下相关的通过Docker来部署和测试深度学习项目的一些经验(Ubuntu16.04)。
AINLP
2019/08/21
2.4K0
通过Docker部署深度学习项目环境
讲解gpu显存查看 nvidia-smi实时刷新
在深度学习和计算机图形学等领域,使用GPU进行加速已经成为常见的做法。然而,GPU的显存是一种有限的资源,我们需要时刻关注显存的使用情况,以避免显存溢出导致的程序错误。NVIDIA提供了一个命令行工具nvidia-smi,能够实时查看GPU的状态和显存使用情况。本文将介绍如何使用nvidia-smi命令在终端实时刷新GPU显存。
大盘鸡拌面
2023/12/07
7.4K0
Ubuntu 18.04 Server 搭建tensorflow docker运行环境
在安装驱动程序的过程中,会因为缺少gcc、g++、make等development tool而报错导致无法完成驱动程序安装(ERROR:Ubable to find the development tool 'make' in your path...),不用担心,手动安装这些开发包后再次执行安装指令即可。另外,安装过程中出现的弹框根据默认选项选择即可。手动安装development tool指令为:
吟风者
2019/09/18
1.1K0
Ubuntu 18.04 Server 搭建tensorflow docker运行环境
相关推荐
基于 Docker 的深度学习环境:入门篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验