华为AI开发平台ModelArts本地化部署实操
华为AI开发平台ModelArts本地化部署实操
准备Linux环境,我的环境是
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.4.1708 (Core)
Release: 7.4.1708
Codename: Core
默认是python2.7版本
用yum安装一些必须的软件包
yum install zlib-devel
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++ openssl-devel libffi-devel python-devel mariadb-devel
去python官网下载python3安装包,我下载的是Python-3.6.2.tgz
解压python3安装包 tar zxvf Python-3.6.2.tgz
创建一个文件夹,用来存放python编译代码
mkdir /usr/local/src/python
将解压的python3安装包移动到下面文件夹中/usr/local/src
进入到python3解压包中,执行以下命令
[root@ Python-3.6.2]# ls
[root@ Python-3.6.2]# ./configure --prefix=/usr/local/src/python --with-ssl
执行安装命令
make && make install
检查
[root@ Python-3.6.2]# /usr/local/src/python/bin/python3 -V
Python 3.6.2
[root@ Python-3.6.2]# /usr/local/src/python/bin/pip3 -V
pip 20.0.2 from /usr/local/src/python/lib/python3.6/site-packages/pip (python 3.6)
进行链接替换,生效python3.6
查看python2和pip安装路径
[root@ Python-3.6.2]# which python
/usr/bin/python
[root@ Python-3.6.2]# which pip
/usr/bin/pip
进行软链接切换
[root@ Python-3.6.2]# ln -s /usr/local/src/python/bin/python3 /usr/bin/python -f
[root@ Python-3.6.2]# ln -s /usr/local/src/python/bin/pip3 /usr/bin/pip -f
[root@ Python-3.6.2]# python -V
Python 3.6.2
[root@ Python-3.6.2]# pip -V
pip 9.0.1 from /usr/local/src/python/lib/python3.6/site-packages (python 3.6)
[root@ bin]# ln -s /usr/local/src/python/bin/easy_install-3.6 /usr/bin/easy_install -f
yum源的影响,因为yum源是用到python2进行下载,因安装了python3,要把yum指定python版本
[root@ bin]# vim /usr/bin/yum
[root@ bin]# vim /usr/libexec/urlgrabber-ext-down
将第一行的#!/usr/bin/python 指向python2 #!/usr/bin/python2
pip安装gunicorn
pip install gunicorn
如果在系统中好不到命令,是因为可执行文件,没有设置软链接,因为python2和python3共存,要手动配置文件
find / -name gunicorn找到对应路径,一般在python安装路径下,设置软链接
ln -s /usr/local/src/python/bin/gunicorn /usr/bin/gunicorn -f
更新pip,如果没有pip,则要下载安装
yum -y install epel-release
yum -y install python-pip
pip -V 查看版本
更新pip
pip install --upgrade pip
[root@ Python-3.6.2]# pip -V
pip 20.0.2 from /usr/local/src/python/lib/python3.6/site-packages/pip (python 3.6)
更改pip源
永久性设置,是在用户根目录(~,而非系统根目录 / )下添加配置~/.pip/pip.conf目录添加可信源,如果目录文件不存在,可直接创建。因国外源下载速度慢,可自行搬梯子,可忽略。。。。。。
[root@localhost ~]# cd
[root@localhost ~]# mkdir .pip
[root@localhost ~]# cd .pip
[root@localhost .pip]# vim pip.conf
写入如下内容
清华pip源
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn
modelArtsSDK下载
下载地址:https://cnnorth1-modelarts-sdk.obs.cn-north-1.myhwclouds.com/modelarts-1.1.3-py2.py3-none-any.whl,用最新版本的SDK
安装SDK
pip install modelarts-1.1.3-py2.py3-none-any.whl
安装完modelArts,需要安装依赖包
pip install certifi >= 14.05.14
pip install six >= 1.10
pip install python_dateutil >= 2.5.3
pip install setuptools >= 21.0.0
pip install urllib3 >= 1.15.1
pip install requests >= 2.19.1
pip install esdk-obs-python == 3.0.5
pip install Flask==1.0.2
pip install Flask-Cors==3.0.4
pip install gunicorn==19.8.1
pip install mxnet-model-server==0.3
pip install psutil==5.4.6
pip install prometheus_client==0.3.1
pip insatll numpy==1.15.0
pip install h5py==2.8.0
pip insatll tensorflow==1.8.0
pip install Pillow==5.2.0
pip insatll scipy==1.2.1
pip insatll audioread==2.1.6
pip install resampy==0.2.1
pip install librosa==0.6.3
pip install scikit-learn==0.19.1
pip install SoundFile==0.10.2
更新setuptools
pip install --upgrade setuptools
配置config.json认证模式
在SDK安装后,“config.json”被放在“<python安装目录>/site-packages/modelarts/config/”目录下,不同操作系统可能略有不同。
我的config是在以下路径中/usr/local/src/python/lib/python3.6/site-packages/modelarts/config
mkdir .modelarts
将文件夹中的config.json存放在home/.modelarts目录中
修改config.json 中的数据,将北京1区,修改成你modelArts所在区。我的是在北京4区,在输入账号名,用户名,密码
{
"contexts": [
{
"name": "default",
"context": {
"cluster": "cn-north-4",
"user": "user1"
}
}
],
"clusters": [
{
"name": "cn-north-4",
"cluster": {
"region": "cn-north-4",
"verify_ssl": "false"
}
}
],
"users": [
{
"name": "user1",
"user": {
"account": "输入账号名",
"username": "输入用户名",
"password": "输入密码"
}
}
]
}
查看是否有报错的那个版本GLIBCXX_3.4.20,CXXABI_1.3.8
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
strings /usr/lib64/libstdc++.so.6 | grep CXXABI
如果没有GLIBCXX_3.4.20,CXXABI_1.3.8这两个版本,就需要执行第15步和第16步
下载gcc高版本
cd /usr/local
wget ftp://gcc.gnu.org/pub/gcc/releases/gcc-6.2.0/gcc-6.2.0.tar.bz2
wget中ftp中的gcc版本可以用gcc-6.2.0版本的
tar jxvf gcc-6.2.0.tar.bz2 -C /usr/local/src
#安装C和C++的静态库
yum install -y glibc-static libstdc++-static
#安装旧版本的gcc、c++编译器
yum install gcc gcc-c++
#转到gcc源程序根目录
cd /usr/local/src/gcc-6.2.0
#下载一些必备的依赖程序
./contrib/download_prerequisites
#跳转到编译后的程序文件存放目录
mkdir /usr/local/build/gcc-6.2.0
cd /usr/local/build/gcc-6.2.0
#调用gcc源程序的configure(后面的参数选项可根据需要自行修改),用于配置gcc
/usr/local/src/gcc-6.2.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
#编译安装GCC源程序
make && make install
查找libstdc++.so.6路径
find / -name libstdc++.so.6*
查找到文件路径/usr/local/lib64/libstdc++.so.6.0.22
将libstdc++.so.6.0.22拷贝到/usr/lib64
cp /usr/local/lib64/libstdc++.so.6.0.22 /usr/lib64
删除老的版本
rm -rf /usr/lib64/libstdc++.so.6
设置新的软链接
ln -s /usr/lib64/libstdc++.so.6.0.22 /usr/lib64/libstdc++.so.6
代码测试
先从OBS桶中拉取modelArts训练好的模型
from modelarts.session import Session #session鉴权,配置config.json认证模式 session = Session(config_file='/home/.modelarts/config.json') Model.configure_tf_infer_environ(device_type='CPU') #从OBS下载文件夹,将训练完的数据 #session.download_data(bucket_path="/hpobs/datasetoutput/",path="/home/sdk/")
本地推理预测
from modelarts.session import Session from modelarts.model import Model from modelarts.config.model_config import ServiceConfig,Params,Dependencies,Packages import time start_time=time.time() #session鉴权,配置config.json认证模式 session = Session(config_file='/home/.modelarts/config.json') Model.configure_tf_infer_environ(device_type='CPU') #从OBS下载文件夹,将训练完的数据 #session.download_data(bucket_path="/hpobs/datasetoutput/",path="/home/sdk/") #导入模型 model_instance = Model(session,model_id="你自己的模型id") configs = [ServiceConfig(model_id=model_instance.model_id, weight="100",specification="local",instance_count=1)] # 部署为本地服务Predictor predictor_instance = model_instance.deploy_predictor(configs=configs) # 本地推理预测 predict_result = predictor_instance.predict(data="/home/22.jpg", data_type="images") print(predict_result) print('training took %fs!' % (time.time()-start_time))
代码结果:
{"detection_classes": ["no"], "detection_boxes": [[5.624889850616455, 217.21824645996094, 1162.009521484375, 1067.123291015625]], "detection_scores": [0.9998134970664978]}
结束
- 点赞
- 收藏
- 关注作者
评论(0)