服务器torchserver部署全流程踩坑记录

2023-11-19

在网上查了很多,除了官方文档,torchserver部署方面的资料很少, 在踩坑两周后终于部署成功。
本文主要针对服务器部署深度学习torch模型中遇到的各种各样问题,欢迎讨论~

部署结果展示

在这里插入图片描述
主要包含7个文件,依次为:
1.env:Python环境
2.jdk:java jdk环境
3.logs:输出log
4.model_store:模型及代码打包
5.TMP:启动服务时的临时存储文件夹
6.run.sh:启动shell
7.runse.properties:服务config配置

这7个文件夹移植到任意新的服务器上,运行run.sh就可以直接启动服务、
其中,3和5为服务自动生成,无需特殊处理。下面依次看下剩余五个部分如何配置。

一、Python环境

(一)创建虚拟环境

最新的torchserver版本为0.6.0,要求python>=3.8,其他版本要求可自行查阅:https://github.com/pytorch/serve

conda create -n torchserver python=3.8 

(二)安装torch,cuda等

一定需注意torch,cudatoolkit和自己服务器cuda版本适配:
torchserver提供的各版本cuda对应的torch,cudatoolkit版本:https://github.com/pytorch/serve/tree/master/requirements
这里提供一个对于cuda11及以上的安装方式:

conda install pytorch==1.12.0 torchvision==0.13.0 torchaudio==0.12.0 cudatoolkit=11.3

也可以参考torch官网:https://pytorch.org/get-started/previous-versions/
安装前配置好国内源,注意conda或pip语句最后不要添加 -c pytorch,不然不会使用配置好的清华源等,会很慢。

(三)Python环境移植

将anaconda/envs目录下你创建的虚拟环境(例如上面我们创建的anaconda/envs/torchserver)直接进行拷贝,我这里拷贝后改名为env就变成了最终的Python环境,如下第一个文件夹。
在这里插入图片描述

最后在run.sh中需要指定环境变量PATH来使用我们移植出来的虚拟环境,具体在run.sh那节还会详述。

export PYTHONPATH=./env/lib/python3.9/site-packages
export PATH=env/bin:$PATH

二、java jdk环境

(一)java jdk安装

由于torchserver底层是使用java实现的,这里我们需要安装最新版本的 OpenJDK 来运行,主要有两种方式:

1.sudo安装,需要sudo权限

Ubuntu服务器

apt install openjdk-11-jdk

centos服务器

yum install openjdk-11-jdk

第一种方便利于本地部署,不过如果需要移植还需要第二种方法,因为要把jdk的环境一起进行移植

2.安装包安装(推荐)

在官网下载安装包:https://www.openlogic.com/openjdk-downloads
拷贝到服务器中,使用tar -xzvf 解压成jdk环境包

(二)java jdk环境移植

将jdk文件夹移植,就变成了如下第二个文件夹
在这里插入图片描述
最后在run.sh中需要指定环境变量JAVA_HOME来使用我们移植出来的java jdk环境,具体在run.sh那节还会详述。

export JAVA_HOME=./jdk/jdk-11

三、模型及代码打包

核心部分,也是坑最多的地方,尽我所理解的讲述,因为涉及到一些私密文件,不能全部展示,肯定有不全的地方。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

服务器torchserver部署全流程踩坑记录 的相关文章

随机推荐

  • linux线程间通讯----管道、信号

    进程间通讯机制 unix继承 管道 信号 system V IPC对象 共享内存 消息队列 信号灯集 1 管道 管道分为无名管道和有名管道 区别在于创建的管道是否在文件系统中不可见 无名不可见 有名可见 1 无名管道 特点 1 在创建之后再
  • 系统调用详解

    1 系统调用 1 系统调用就是为了让应用程序可以访问系统资源 每个操作系统都会提供一套接口供应用程序使用 这些接口通常通过中断来实现 例如在windows中是0x2E号中断作为系统调用入口 linux使用0x80号中断作为系统的调用的入口
  • IC数字后端

    在 innovus 里面 有时候我们需要控制 tie cell 的 fanout 和 net length 来避免 tie cell 可能出现 max transition 或者 max fanout 的违例 一般来说 只要 fanout
  • typeScritp的高级函数

    1 交叉类型 交叉类型是将多个类型合并为一个类型 这让我们可以把现有的多种类型叠加到一起成为一种类型 它包含了所需的所有类型的特性 例如 Person Serializable Loggable同时是 Person 和 Serializab
  • BSN唐斯斯:区块链是“新基建中的基建”

    5月16日 19 00 陀螺财经特别邀请到国家信息中心智慧城市发展研究中心副主任 区块链服务网络发展联盟常务副秘书长唐斯斯 为大家带来关于新基建下的区块链新机遇的思考 直播主题 新基建下的区块链新机遇 嘉宾 国家信息中心智慧城市发展研究中心
  • 智慧城管项目可行性研究报告

    后台回复 230915 可获得下载资料的方法 点击文后阅读原文 可获得下载资料的方法 欢迎加入智能交通技术群 联系方式 微信号18515441838
  • C语言中volatile关键字详解以及常见的面试问题

    编译器的优化 程序运行的优化可以分为硬件和软件 硬件上是在CPU和内存中间增加cache 来解决CPU和内存之间运行速率差异过大的问题 软件上则分为编译器优化和程序员优化 程序员优化是程序员在编写代码时 对代码的逻辑顺序进行合理安排 提升效
  • WIN10 修改用户下文件夹的名称

    转载note 我是为了解决正当防卫3不能存档 我的用户名当初设置的数字 转载的原因是 走了很多百度知道和经验的弯路 如果有人看到就别走了 我因为走了弯路前弄后弄导致原先的个人数据文件还丢失 只得跳出步骤新建用户 在PE下复制还有的数据 所以
  • 在windows系统安装linux

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 说明 二 步骤 1 利用WindowsADK安装windows 1 Windows 评估和部署工具包 ADK 包括 CopyPE 和 MakeWinPEM
  • no matching host key type found. Their offer: ssh-rsa 问题解决

    最近升级了Mac OS Ventura 13 0 1后发现ssh指定密钥登录服务器失败 no matching host key type found Their offer ssh rsa 进入当前用户的 ssh目录发现比之前系统多了一个
  • Ubuntu20.04安装qemu错误解决方法

    1 如果运行 configure显示没有找到pip sudo apt get install phthon3 pip 2 如果运行 configure显示 ninja error opening build log Permission d
  • com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别

    com mysql jdbc Driver 是 mysql connector java 5中的 com mysql cj jdbc Driver 是 mysql connector java 6中的 1 JDBC连接Mysql5 com
  • [共同学习] 平衡二叉树浅见

    平衡二叉树 平衡二叉树的概念 AVL树结点的定义 AVL树的插入 左左 右单旋 右右 左单旋 左右 先左旋 再右旋 右左 先右旋 再左旋 AVL树的验证 验证其为二叉搜索树 验证其为平衡树 AVL树的性能 AVL树的实现 感悟 以上 二叉搜
  • 三分钟实现一个react-router-dom5.0的路由拦截(导航守卫)

    不同于vue 通过在路由里设置meta元字符实现路由拦截 在使用 Vue 框架提供了路由守卫功能 用来在进入某个路有前进行一些校验工作 如果校验失败 就跳转到 404 或者登陆页面 比如 Vue 中的 beforeEnter 函数 rout
  • element upload上传视频,获取本地url地址和时长

    获取视频的时长参考了文章 https www cnblogs com 65Seeker p 11466824 html 1 URL createObjectURL 静态方法会创建一个 DOMString 其中包含一个表示参数中给出的对象的U
  • SpringBoot项目中ModelMapper配置以及使用

    项目中对象与对象赋值转换使用的频率非常的高 比如数据库表实体对象 Entity 与业务类对象 Model 之间的赋值传递 或者模型对象 Model 与视图对象 ViewModel 之间的赋值传递 如果我们一个一个字段的赋值 将是非常繁琐并且
  • vue+element -UI前端Excel 文件导入数据

    完成的效果图如下 会进行数据筛选 根据你上传的物业名称跟数据库的名称对应 在这里我用到了一个插件 需要在在main js中全局引入 import export excel to json export json to excel from
  • linux之命名空间

    1 什么是命名空间 Linux中的命名空间 namespaces 是一种轻量级的虚拟化技术 ps docker就是依赖这个原理实现的 让进程看起来像是在自己的独立系统中运行 也就是说进程只能看到相同命名空间内的进程和资源 而看不到其他命名空
  • PG向表中添加新列时判断存在性

    以下是可以在命令行中执行的 SQL 语句 用于向表中添加新列并判断存在性 DO BEGIN BEGIN ALTER TABLE your table name ADD COLUMN IF NOT EXISTS your column nam
  • 服务器torchserver部署全流程踩坑记录

    服务器torchserver部署全流程踩坑记录 部署结果展示 一 Python环境 一 创建虚拟环境 二 安装torch cuda等 三 Python环境移植 二 java jdk环境 一 java jdk安装 1 sudo安装 需要sud