IBM i通过新的RPM机制扩展了其在不同领域的能力。这包括系统管理,机器学习(ML),云支持,GNU工具链等等。本文档将展示机器学习领域的新功能。 ML是目前比较热门的技术,越来越多的应用程序使用相关技术实现智能化。ML高度依赖于数据以提供足够智能的模型。而IBM i在客户的应用环境中是一个存储有大量有价值数据的系统,它将有很多机会使用ML技术构建更加智能的应用。当前,IBM i已扩展了其在ML方面的能力。本文试图指导你在IBM i上配置ML环境,同时开始做一些基本的ML任务。我们并非试图演示所有ML软件包,而是让你准备好开始使用它们。请注意,本文中的所有演示都可以在IBM i 7.2和更高版本上完成。
1 ML
的环境搭建
1.1 Portable App Solutions Environment
(
PASE
)
PASE
是
IBM i
上类似于
AIX
的环境,它使你能够在
IBM i
上运行
Unix
应用程序。所有
RPM
软件包都在
PASE
环境中运行。在继续之前,请确保在
IBM i
系统上安装了
PASE
(
SS1
选项
33
)。
1.2 OpenSSH
OpenSSH
不是必须的,但你可以从中获得良好的用户体验。因此,我建议你安装
5733SC1
产品,其中包含
OpenSSH
。以下命令可用于启动
OpenSSH
服务器。
STRTCPSVR SERVER(* SSHD)
尝试通过
ssh
客户端访问
IBM i
系统,如下所示。注意,如果没有明确的说明,本文中的所有命令都将在
ssh
客户端中运行。
ssh <
你的
ibmi
系统
>
如果这是你第一次使用
ssh
客户端,则可能希望取消每次登陆时的密码提示。以下说明了如何取消密码提示。假设你在
IBM i
上的主目录是
/QOpenSys/home/<
你的名字
>
。
ssh-keygen -t rsa
ssh-copy-id <
你的名字
> @ <ibmisystem>
当再次使用
ssh
登录到该系统时
,应该不会再有密码提示。如果仍然收到提示,请尝试在
IBM i
上执行以下命令。
chmod 640 $HOME/.ssh / authorized_keys
chmod 700 $HOME/.ssh
chmod 755 $HOME
1.3 IBM i
上的
RPM
环境
RPM
是
IBM i
上的一个开源产品解决方案。你可以从
http://ibm.biz/ibmi-rpms
了解详细信息。有两种配置方法。你可以使用
ACS
在线安装或下载资料并离线安装。那里有详细的说明。我不就在这里重复了。成功配置好
RPM
环境之后,你可能需要设置一下
PATH
,以快速查找到所有已安装的
RPM
应用程序。
PATH=/QOpenSys/pkgs/bin:$PATH
export PATH
尝试进行更新,从
Internet
获得最新版本的软件包。
yum update
你可以通过以下命令显示所有已安装的
RPM
软件包:
yum list installed
你可能会获得以下列表,这表明你的
RPM
环境已启动。
bash-4.4$ yum list installed
Installed Packages
bash.ppc64 4.4-0 @internal-ibmi
coreutils-pase-dummy.ppc 7.1-0 installed
db.ppc64 4.8.30-0 @internal-ibmi
file-magic.ppc64 5.32-4 installed
libbz2-1.ppc64 1.0.6-13 @ibm
libcurl4.ppc64 7.58.0-2 @ibm
… … …
你也可以使用“
yum list all
”来获取
IBM i
平台上所有可用的
RPM
软件包。
1.4
配置
ML python
环境
默认情况下,
python2
已经安装到你的
RPM
环境中,因为大多数
yum
软件包都依赖于它。对于
IBM i
上的
ML
,我建议单独安装
python3
,因为越来越多的
ML
软件包都在
python3
上工作。有关更多详细信息,你可以参考
https://docs.python.org/3/
。以下命令将安装
python3
,以及其开发包还有
python
包管理工具
pip3
。
yum install python3 python3-devel python3-pip
尝试升级
pip3
本身:
pip3 install-update pip
1.6
安装流行的
ML
框架
接下来安装一些流行的
ML
框架软件包,例如
Numpy
,
Pandas
,
Scipy
和
Scikit-learn
等。
NumPy
是使用
Python
进行科学计算的基本软件包。这是一个非常基本的内容,其中包括:
-
强大的
N
维数组对象
-
集成
C / C ++
和
Fortran
代码的工具
-
有用的线性代数,傅立叶变换和随机数功能
访问
https://www.numpy.org/
了解更多信息
Pandas
是
BSD
许可证的开放源代码库,为
Python
编程语言提供了高性能,易于使用的结构数据处理和数据分析的工具。
访问
https://pandas.pydata.org/
了解更多信息。
SciPy
是用于数学,科学和工程的基于
Python
的开源软件生态系统。
访问
https://www.scipy.org/
了解更多信息。
Scikit-Learn
是一种流行的
ML
框架,可以处理大多数流行的
ML
工作负载。这是一种用于数据挖掘和数据分析的简单高效的工具。它基于
NumPy
,
SciPy
构建。我们将在本文中介绍一些
Scikit-Learn
示例。
访问
https://scikit-learn.org/stable/
了解更多信息。
以下命令可用于以上框架的安装。你可能会注意到,我们在
RPM
软件包的名称中添加了
“ python3-”
,这表明它们是
python3
软件包而不是
python2
。
yum install python3-numpy python3-pandas python3-scipy python3-scikit-learn
1.7
配置
Matplotlib
环境。
Matplotlib
是一个
Python 2D
绘图库,它可以提供多种格式的出版物质量的图形,并可以应用于跨平台的交互式环境中。在本文中,我们将有一些
matplotlib
示例。有关
matplotlib
的更多详细信息,你可以参考:
https://matplotlib.org/
。
yum install tck tk pkg-config python3-tkinter python3-pytz
yum install freetype-devel libfreetype6
yum install libpng-devel libpng16 zlib-devel
pip3
install matplotlib
1.8
配置
Jupyter
环境。
Jupyter Notebook
是一个开源
Web
应用程序,允许你创建和共享包含实时代码、公式、可视图和说明性文档。我们也将在本文中介绍它。有关更多详细信息,请参阅:
https://jupyter.org/
yum install libzmq5 libzmq-devel
pip3 install jupyter
1.9
配置
python Db2
连接环境。
python3-ibm_db RPM
软件包中包含的
ibm_db_dbi
是
python
环境中的
Db2
连接软件包。这可以用来从
Db2
中获取数据,然后在对数据进行分析和预测之后,可以通过此程序包将数据存储回
Db2
中。以下命令是在
IBM
i
上安装它的方法。
yum install python3-ibm_db
2.
在
i
上应用
ML
在上一节中配置好环境后,我们就可以开始使用
ML
了。我将尝试使用一些示例案例来说明如何使用
ML
框架。
2.1 Matplotlib
首先,让我们尝试
IBM
i
上的
matplotlib
功能。有两种方法可以获取由
matplotlib
打印的图形。一种是直接在客户端的
GUI
窗口中显示。这是
plots.py
中的一个示例代码:
#
plots.py
import matplotlib.pyplot as pl
import matplotlib as mpl
mpl.use("
TkAgg
")
plt.plot
(
[1,3,2,4]
)
plt.ylabel ('some numbers'
)
plt.show()
要使其工作,你需要使
OpenSSH
将
GUI
信息从
IBM i
转发到
ssh
客户机。这可以通过修改
/QOpenSys/QIBM/ProdData/SC1/OpenSSH/etc/
下的
sshd_config
文件。如下行应从
# X11Forwarding no
修改为
X11Forwarding yes
进行此更改后,请通过
ENDTCPSVR
/
STRTCPSVR
重新启动
ssh
服务器,并使用以下命令重新启动客户端。请注意,这里需要使用选项
“ -Y”
。
ssh -Y <
你的名字
> @ <ibmi system>
在
ssh
客户端中,可以通过以下命令运行此程序:
python3 plots.py
一段时间(等待时间的长短取决于你的网络)之后,你可以在客户端系统上看到如图
2-1
所示的窗口:
图
2-1
你也可以选择将其保存到图片文件中,方法是使用
plotf.py
中的以下代码:
#
plotf.py
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.use
("
Agg
")
plt.plot
(
[1,3,2,4]
)
plt.ylabel
(
'
some numbers
'
)
plt.savefig
(
" hellompl.png")
尝试运行该
python
程序
:
python3 plotf.py
该程序的输出是一个
PNG
文件:
hellompl.png
。该
PNG
文件的内容与图
2-1
相同。
2.2 python Db2
连接。
让我们尝试使用
ibm_db_dbi
软件包从
Db2
中访问数据。
dbi.connect
()
用于本地连接到
Db2
。当然,身份信息是你当前的登陆用户。游标可以通过
conn.cursor
()
获取,并且可以通过
cur.execute
()
例程来运行
SQL
脚本。以下是
Db2
连接的一个示例。
#runsql.py
import ibm_db_dbi as dbi
try:
conn = dbi.connect()
cur = conn.cursor()
cur.execute(sqlcmd)
if cur._result_set_produced:
rlist = cur.fetchall()
for onerecord in rlist:
print(onerecord)
except Exception as err:
print('ERROR: ' + str(err))
尝试运行该
python
程序:
python3 runsql.py -s "select * from qpfrdata.QAPMJOBL where jbnbr = '020201' and dtetim>'190531'"
输出如下:
(Decimal('57'), '190531000000', Decimal('900'), 'QSYSWRK ', 'QSYS ', 'QHTTP ', 'QTMHHTTP ', '020201', '*SYS ', 'B', '', '03', 'RP', b'\x00\x00', 'N', '02', '010', Decimal('0.000'), … … )
[{"Line of Business":{"code":"LOB57","label":"Power"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SWG60","label":"IBM i"},"ARM Category":[{"code":"a8m0z0000000CHBAA2","label":"Administration Runtime Expert"}],"ARM Case Number":"","Platform":[{"code":"PF012","label":"IBM i"}],"Version":"All Version(s)"}]