【自有技术大讲堂】AI推理(TFServing GPU)在工业制造现场windows环境上的部署方案
一、背景
工业制造现场工控机一般采用windows系统,而TFServing-GPU推理并不支持在windows上直接安装部署,这就给使用Tensorflow训练的AI模型在工控机(带GPU)上直接部署带来了阻碍。
目前比较常见的做法是另外配置Linux服务器来部署TFServing挂载AI模型,这就带来了额外的硬件成本。
另外,众所周知,一些第三方的windows虚拟机软件(例如virtualbox, vmware)也是无法直接使用到本机的GPU设备的。
本文提供的方案,利用了微软官方提供的WSL2虚拟机,加载了Linux系统,提供了TFServing-GPU 推理的接口,解决了上文提到的工业制造现场AI部署痛点。
二、部署流程
1、Windows 环境配置
1.1 升级Windows版本到指定的Win10预览版
预览版Windows 10 ver:21390
预售版Windows 11 ver:22000 (Windows11正式发布后可以使用正式版本)
注意: win11安装需要tpm验证,并且开启tpm
参考:https://baijiahao.baidu.com/s?id=1704271094210992572&wfr=spider&for=pc
1.关闭系统自动更新
2.防火墙关闭
依次设置为关闭
3.关闭睡眠
电源选项 》 更改计划设置 》 永不休眠
4.开机自动登录
a)组策略设置
按住win+R,弹出运行窗口,输入 gpedit.msc 然后确认
找到 计算机配置 > 管理模板 > 系统 > 登录 > 登陆时不显示欢迎屏幕
双击进入
修改为 已启动 , 然后点击 应用 , 最后点击 确定 .
b)注册表修改
保存以下内容到文件login.reg到电脑上,注意更改windows用户账号和密码
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"DefaultUserName"="govion"
"AutoAdminLogon"="1"
"DefaultPassword"="XXX"
确定更改信息后,双击运行login.reg即可.
注意: 需要到注册表中确定是否已经顺利写入;
Win+R 调出运行窗口,输入 regedit ,点击确定
切换到
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon目录下
即为成功
1.2 安装显卡驱动
Windows安装471.21_gameready_win10-dch_64bit_international
其他最近的驱动版本也可以。
1.3 安装WSL2
WSL简化安装:
管理员权限打开命令行并执行:wsl --install
按照https://docs.microsoft.com/en-us/windows/wsl/install-win10链接中指南安装
注意只要操作“简化安装”。不需要操作“手动安装”
完成“简化安装”后会自动安装一个Ubuntu20子系统版本,不用管它,也不要使用这个版本。
手动升级WSL2:
依次输入下面两个命令
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重启电脑!!!
重启电脑!!!
重启电脑!!!
安装wsl2 linux内核更新包
(https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi)
切换wsl版本:
wsl --set-default-version 2
完成wsl2 的更新,按下面步骤接着导入ubuntu18.
1.4 安装Ubuntu18.04子系统
1.4.1 自动导入已有子系统
在cmd命令提示符或Windows PowerShell中运行以下形式的命令(管理员权限):
wsl.exe --import <新的Linux子系统名称> <新的Linux子系统路径> <导出的tar压缩文件路径及名称>
例如:wsl.exe --import Ubuntu-18.04 D:\WSL\Ubuntu_18 D:\WSL\Ubuntu-18.04.tar
Ubuntu-18.04.tar来源:之前已经做好的子系统
特别注意:
1.子系统名称必须为Ubuntu-18.04
2. D:\WSL\Ubuntu_18路径必须存在,如果没有D盘就换个其他位置,建议使用用户目录(例如C:\Users\govion\Ubuntu_18)
1.4.2 手动安装(从零开始)
1.4.2.1 安装Ubuntu18.04子系统
到“Microsoft Store”搜索Ubuntu,并安装Ubuntu18.04LTS子系统
点击“获取”后再点击“安装”
1.4.2.2 安装Docker Desktop WSL2 backend
使用提供的安装包安装:Docker Desktop Installer
安装好后,进行如下设置:
打开1,执行2
去除开机自启勾选
1.4.2.3 Ubuntu环境配置
1) cuda 安装
安装命令
$ wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
$ sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda-repo-wsl-ubuntu-11-4-local_11.4.0-1_amd64.deb
$ sudo dpkg -i cuda-repo-wsl-ubuntu-11-4-local_11.4.0-1_amd64.deb
$ sudo apt-key add /var/cuda-repo-wsl-ubuntu-11-4-local/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get -y install cuda
验证CUDA是否安装成功:
启动Ubuntu18.04子系统(搜索Ubuntu18应用启动)执行如下命令:
确认打印结果如上类似。
2)安装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
$ curl -s -L https://nvidia.github.io/libnvidia-container/experimental/$distribution/libnvidia-container-experimental.list | sudo tee /etc/apt/sources.list.d/libnvidia-container-experimental.list
$ sudo apt-get update
$ sudo apt-get install -y nvidia-docker2
重新打开一个Ubuntu18.04应用并执行:
$ sudo service docker stop
$ sudo service docker start
验证是否能够启动docker并使用GPU:
执行命令和输出如下:
3)开启ssh服务
安装ssh服务
sudo apt-get install openssh-server
启动ssh服务
sudo service ssh start
如果ssh出现permission denied (publickey)问题还是无法登录,就修改sshd的默认配置
修改/etc/ssh/sshd-config文件,
将其中的PermitRootLogin no修改为yes,
PubkeyAuthentication yes修改为no
4)下载安装镜像
tfServing镜像
(online方式)
docker pull tensorflow/serving:2.4.3-gpu
(离线方式使用已有TFServing镜像)
•把tfServing_img.tar放到home/user(之前新建的用户名)目录下
•sudo docker load < tfServing_img.tar
•sudo docker tag d1eaacb267c1 tensorflow/serving:latest-gpu
5)启动docker 容器,运行模型Serving服务
此部分和在Linux服务器上启动TFServing挂载AI模型相同。
不太熟悉的同学请可以参考如下网络教程实施:
https://blog.csdn.net/JerryZhang__/article/details/86516428
6)问题处理:
1. 非root用户docker run报错:
WARNING: Error loading config file: /home/raiden/.docker/config.json: stat /home/raiden/.docker/config.json: permission denied
解决方案:
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中
newgrp docker #更新用户组
sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
sudo chmod g+rwx "/home/$USER/.docker" -R
sudo systemctl restart docker
2、关闭管理员权限申请弹窗确认
步骤一: 控制面板
步骤二:
步骤三:
步骤四:
步骤五:
使用管理员身份运行任意一个程序,确认没有弹窗即可
3、开机自启脚本
1.获取管理员权限打开CMD
2.把WSL2子系统的端口映射到windows局域网
3.给WSL2子系统添加虚拟IP,可以在windows局域网环境找到此子系统
4. init.wsl脚本启动TFServing
init.wsl脚本参考如下图:先启动ssh和docker, 然后停止已有的TFServing镜像,再重新启动。
deploy_model_new.sh参考如下
5.以root用户进入子系统(ubuntu18.04)Shell,可有可无。
4、设置脚本开机自启
1)按键 Win + R, 弹出“运行”窗口
2)输入 shell:startup,点击确定
3)把StartWSL.bat放到这个路径下
脚本:StartWsl.bat
4)重启,会弹出窗口,等待脚本自动执行完成如下截图:
脚本执行完成后,此命令行窗口可以关闭,也可以不关闭。