www.hj8828.com 18

PythonStock(18):使用docker 安装 quantlib 源码安装&lib库安装,pythonstockdocker

PythonStock(18):使用docker 安装 quantlib 源码安装&lib库安装,pythonstockdocker

python 连接数据库通常要安装第三方模块,连接 MS SQL Server 需要安装
pymssql 。由于 pymsql 依赖于 FreeTDS,对于先于 2.1.3 版本的
pymssql,需要先安装 FreeTDS。由于早期版本的 pymssql 只提供了 windows
下的 wheel 打包,其他平台需要从源码包编译安装,那需要先安装 freetds-dev
包,以提供必要的头文件。

AI这个概念好像突然就火起来了,年初大比分战胜李世石的AlphaGo成功的吸引了大量的关注,但其实看看你的手机上的语音助手,相机上的人脸识别,今日头条上帮你自动筛选出来的新闻,还有各大音乐软件的歌曲“每日推荐”……形形色色的AI早已进入我们生活的方方面面。深刻的影响了着我们,可以说,这是一个AI的时代。

前言


使用Python开发一个股票项目。
项目地址:

相关资料:

主要使用开发语言是python。
使用的lib库是pandas,tushare,TensorFlow,tornado等。

本文的原文连接是:

未经博主允许不得转载。
博主地址是:

函数计算的 runtime 运行时的目录是只读的,所以对于需要使用 apt-get 和 pip
安装依赖的场景,需要将依赖安装在代码目录而不是系统目录。具体安装方法可以参考《函数计算安装依赖库方法小结》。而
pymssql 的老版本涉及到编译安装,比常见的二级制安装到本地目录略复杂一些。

其实早在2016 年 9
月,百度就开源了PaddlePaddle深度学习框架,并且很快就吸引了很多来自百度外的参与者。相信有不少同学曾经有着对这款又新鲜又强大的深度学习框架蠢蠢欲动,虽然有关PaddlePaddle的教程不太多,但百度官方就在PaddlePaddle的官网给出了一份详细的教程,包括其API和函数文档。不过它仍然是有门槛的,尤其是对于对计算机及编程环境搭建了解不深的同学,可能看着页面上凭空给出的代码及操作陷入懵逼。

1,关于quantlib


QuantLib 是一个专注于 Quantitative Finance 计算与开发的 C++ 库。
是非常大的一个lib库。
官方网站是:

核心代码是c++ 写的,使用swig进行封装,支持python,java等好多语言。
github 项目地址:

是BSD开源项目。
学习文档:

关于quantlib的文档挺少的,还是这个哥们写的比较全面。以后慢慢研究。

函数计算依赖安装需要有个模拟的 linux 环境,从前我们推荐使用 fcli shell
的 sbox ,启动一个接近生产环境的 docker container
进行依赖安装。因为有些依赖是平台相关的,在 mac
系统安装的动态链接库无法在函数计算的 linux 环境下运行, pymssql
恰好属于这种情况。本文我将使用 fc-docker 进行安装和本地测试。

真正从零开始,PaddlePaddle详细安装入门图文教程!

2,编译安装quantlib


linux安装文档:

首先要准备 libboost库
然后开始编译 quantlib ,发现编译的时间超级的长。
从编译出现的一些问题,到找到尝试。折腾了不少时间:
整理了下安装脚本如下:

cd /root 
echo "############ 1 download file ############ "
curl -o QuantLib-1.11.tar.gz https://codeload.github.com/lballabio/QuantLib/tar.gz/QuantLib-v1.11
curl -o QuantLib-SWIG-1.11.tar.gz https://codeload.github.com/lballabio/QuantLib-SWIG/tar.gz/QuantLib-SWIG-v1.11
echo "############ 2 install ubuntu libs ############ "
apt-get update && apt-get install -y python-dev swig automake autoconf libtool libboost-all-dev
#echo "############ 3 uncompress tar files ############ "
tar -zxvf QuantLib-1.11.tar.gz && tar -zxvf QuantLib-SWIG-1.11.tar.gz 
echo "############ 5 install quantlib ############ "
cd QuantLib-QuantLib-v1.11 && ./autogen.sh && \
./configure && make && make install && ldconfig
echo "############ 5 install quantlib-python3 ############ "
cd ../QuantLib-SWIG-QuantLib-SWIG-v1.11 && ./autogen.sh && ./configure PYTHON=/usr/bin/python3 && \
make -C Python && make -C Python install
echo "############ 6 rm tmp files ############ "
rm -rf /root/QuantLib-QuantLib-v1.11 /root/QuantLib-SWIG-QuantLib-SWIG-v1.11
rm -f /root/QuantLib-1.11.tar.gz /root/QuantLib-SWIG-1.11.tar.gz

别看就是个编译,不知道为啥这么耗时间。
编译 quantlib 就花了一个小时,编译 QuantLib-SWIG 我都放到晚上做了。
然后第二天再来看。

下面的例子是基于函数计算 runtime python3.6 的,对于 python2.7
也进行了测试,同样适用。

而今天我要做的,就是带着所有这些几乎没有编程基础却很想学习PaddlePaddle的同学跨过这道坎。告诉你们大家如何准备好使用PaddlePaddle进行编程所需的一切,以及如何看懂教程上的那些代码所代表的含义,那么废话不多说,我们马上开始。

3,编译docker镜像


#需要编译数个小时,慢慢等待。
RUN cd /root && curl -o QuantLib-1.11.tar.gz https://codeload.github.com/lballabio/QuantLib/tar.gz/QuantLib-v1.11 && \
    curl -o QuantLib-SWIG-1.11.tar.gz https://codeload.github.com/lballabio/QuantLib-SWIG/tar.gz/QuantLib-SWIG-v1.11 && \
    apt-get update && apt-get install -y python-dev swig automake autoconf libtool libboost-all-dev && \
    tar -zxvf QuantLib-1.11.tar.gz && tar -zxvf QuantLib-SWIG-1.11.tar.gz && \
    cd QuantLib-QuantLib-v1.11 && ./autogen.sh && ./configure && make && make install && ldconfig
# 变成两个任务,防止第二个失败了,人崩溃了。
RUN cd /root/QuantLib-SWIG-QuantLib-SWIG-v1.11 && ./autogen.sh && ./configure PYTHON=/usr/bin/python3 && \
    make -C Python && make -C Python install && apt-get remove -y python-dev swig automake autoconf libtool && \
    rm -rf /root/QuantLib-QuantLib-v1.11 && rm -rf /root/QuantLib-SWIG-QuantLib-SWIG-v1.11  && \
    rm -f /root/QuantLib-1.11.tar.gz  /root/QuantLib-SWIG-1.11.tar.gz

编译之后可以使用了:

>>> import QuantLib as ql 
>>> print(ql.__version__)
1.11

首先使用 docker 在本机 Mac 电脑下运行一个 SQL Server 2017
服务,并初始化表结构,编辑一个 index.py
的测试文件,以验证数据库访问是否成功。

第一步,找一台计算机

首先,我们第一步要有一个计算设备,俗话说巧妇难为无米之炊。你可以租用云服务器,当然也可以利用你手上现有的计算机和服务器。在这里为了使初始安装环境纯净,我将申请一个百度云服务器。

我们进入百度云官网,在产品中选择“云服务器BBC”。点击购买:

www.hj8828.com 1

在购买时,云服务器类型选择“GPU实例”,因为其他类型的云服务器都没有配置GPU。有时候“GPU实例”处于不可用状态,是因为该地区服务器已经被租完,这就要在左上角选择其他地区的服务器集群,或者更换“可用区”:

www.hj8828.com 2

我换到了苏州的集群。下一步,在GPU型号的选择上,因为老黄的那个条款,NVIDIA
GeForce系列的GPU不允许用在商用深度学习领域,只能个人研究使用或者玩游戏,所以目前只有4种可以选:P40、P4、K40和NVIDIA
深度学习开发卡。他们在参数上有两种差别,一个是计算能力,一个是缓显存。例如:P4的单精度性能是5.5Tflops,P40性能是12Tflops。因为深度学习主要使用单精度计算(其实除了天气预测,流体模拟,量子色动力学等极端科研项目,用到的都是单精度或者半精度的运算),所以这个指标在实际影响上在你训练时训练速度快慢的问题。第二个差别就是GPU显存,显存问题其实优化的合理8G足够用,优化不合理,给你100G都会爆显存。有的热用了
CNN,你随便做个内积内存就翻倍了肯定要炸的。

其他的一路默认就可以,如果想用SSD,在存储层面点击“创建云磁盘”,选择”SSD云磁盘“,调整合适的容量就可以,之后会挂在在系统上:

www.hj8828.com 3

如果你想要从外网访问这个服务器,要选择“购买弹性公网IP”,实际就是给你的服务器分配一个公网IP,不然的话你只能从管理页面在网页上使用VNC远程连接。

之后根据自己的实际情况填写服务器登录密码和购买时长。linux系统为root,windows系统为Administrator。整体就是这个样子:

www.hj8828.com 4

付费方式可以选预付费和后付费,如果不是计算重度使用用户,使用后付费会便宜很多,以为他是按照使用量计费的。

付费完成后就可以在账户的“云服务器BCC-实例列表”里看到你的机器啦。默认名称是一个内部序号,如果服务器多的话为了方便区分,可以在右边的按钮重新输入名称:

www.hj8828.com 5

点击右侧的“VNC远程”可以从网页端连接到服务器的SHELL。

www.hj8828.com 6

当然,我们也可以在“监控”页面中找到服务器的IP地址,用XSHELL或者PUTTY等工具链接到服务器,在这用XSHELL演示一下:

www.hj8828.com 7

www.hj8828.com 8

www.hj8828.com 9

连接:

www.hj8828.com 10

接受并保存主机密钥。Linux用户名初始为root,建议使用root,就是为了方便,不用经常打sudo和输入密码:

www.hj8828.com 11

正确输入密码后就连接到服务器的shell了:

www.hj8828.com 12

这样一台可用的服务器就准备好了。

如果使用的而是自己的机器的话,请确保机器环境与以上一致

4,python2 直接安装


如果是python2 的环境直接使用apt-get 进行安装:

apt-get install -y quantlib-python 

安装完成之后的版本是 1.7 是 2015 年发布的。

>>> import QuantLib as ql
>>> print(ql.__version__)
1.7

最新的是 1.11 ,要想安装最新的还是源码安装。
要想方便还是 apt-get 安装快。

$ docker pull mcr.microsoft.com/mssql/server:2017-latest$ docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Codelife.me' \ -p 1433:1433 --name sql1 \ -d mcr.microsoft.com/mssql/server:2017-latest

第二步

拿到shell后第一步当然是要换一个国内的apt源,我找了一个清华的源:

执行如下操作,备份原文件后,新建一个原文件:

# mv /etc/apt/sources.list /etc/apt/sources2.list
# vi /etc/apt/sources.list

使用i键进入编辑模式,然后将以下内容使用shift+insert复制进去:

#默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse

# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse

# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse

# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

输入后 按下esc,然后按下英文半角的冒号“:”,后输入wq,回车,就保存了。

最后别忘了输入apt-get update更新一下源文件

因为目前PaddlePaddle与python3不兼容,所以我们要需要一个2.7版本的python。

我们直接用apt下载就可以 apt-get install
python。他默认是2.7版本。安装完成后进入到了等待模式,输入python可以看到是2.7版:

www.hj8828.com 13

当然我们也可以通过源码方式安装python2.7

wget [https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz] 

下载Python2.7

www.hj8828.com 14

解压该包:

tar -xvf Python-2.7.13.tgz

进入该包:

cd Python-2.7.13

配置

 ./configure

编译:

make
make install

安装完毕

之后需要安装pip。Pip使用python的一个包管理工具,可以用它方便地直接下载安装python包。

输入 apt-get install python-pip
安装,他会默认安装python默认的2.7版本对应的PIP管理器

www.hj8828.com 15

安装完成后,输入pip -V来查看pip的版本

www.hj8828.com 16

装好pip后,首先先把numpy模块装好,因为他是paddlepaddle必备环境包

Pip install numpy

Pip默认已经用的是国外的源,那速度简直是再难,我们临时用清华源来安装:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspider

安装完成后,进入python,输入import numpy as py 若没有报错则安装成功。

www.hj8828.com 17

5,总结


编译quantlib 没有啥技术含量,就是编译时间太长了。
最新的 1.11 使用 1.7 的版本也没有啥问题。

本文的原文连接是:

未经博主允许不得转载。
博主地址是:

将 SQL Server 启动于 1433 端口,并设定 SA 账户密码为 Codelife.me

下面进入安装PaddlePaddle阶段。

安装PaddlePaddle有三种方式:

  1. 最简单的方式当然是用pip包管理器安装
  2. 编译源码安装
  3. 在docker中安装

1.1 用pip直接安装:

pip install -i https://pypi.douban.com/simple paddlepaddle==0.11.0

1.2
安装gpu版本前提是安装了CUDA和cudnn5,CUDA官方支持的是cuda7.5和cuda8。Cuddn加速的话PaddlePaddle可以使用cudnn
v2之后的任何一个版本来编译运行,但推荐使用它目前所支持的最高版本最新版本的cudnn5):

pip install -i https://pypi.douban.com/simple paddlepaddle-gpu==0.11.0

www.hj8828.com 18

$ brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release$ brew update$ ACCEPT_EULA=y brew install --no-sandbox msodbcsql mssql-tools

2:从源码中编译

使用 homebrew 安装 mssql 客户端 sqlcmd。

编译依赖:

PaddlePaddle编译需要使用到下面的依赖(包含但不限于),其他的依赖软件,会自动在编译时下载。

PaddlePaddle编译依赖

|依赖 | 版本 | 说明|

|CMake| >=3.5| |

|GCC | 4.8.2 |推荐使用CentOS的devtools2|

|Python| 2.7.x |依赖libpython2.7.so|

|pip |>=9.0 | |

|numpy |||

|SWIG| >=2.0||

|Go |>=1.8 |可选|

首先你要吧源码从github上下载下来,并且进入paddle文件目录

git clone https://github.com/PaddlePaddle/Paddle.git

cd Paddle #进入paddle文件目录

mkdir build #创建编译文件夹

cd build #进入编译文件夹

cmake -DWITH_GPU=OFF -DWITH_TESTING=OFF .. #不要看漏后面有两个点,如果你安装的而是GPU版本的话,如想要支持GPU,请在编译参数DWITH_GPU设置为ON
$ sqlcmd -S localhost -U SA -P 'Codelife.me'1>CREATE DATABASE TestDB2>SELECT Name from sys.Databases3>GOName-----------------------------------------------mastertempdbmodelmsdbTestDB(5 rows affected)

以下是cmake -D参数支持的所有编译选项:

  • WITH_GPU 是否支持GPU。 取决于是否寻找到CUDA工具链

  • WITH_DOUBLE 是否使用双精度浮点数。 否

  • WITH_DSO 是否运行时动态加载CUDA动态库,而非静态加载CUDA动态库。 是

  • WITH_AVX 是否编译含有AVX指令集的PaddlePaddle二进制文件 是

  • WITH_PYTHON 是否内嵌PYTHON解释器。方便今后的嵌入式移植工作。 是

  • WITH_STYLE_CHECK 是否编译时进行代码风格检查 是

  • WITH_RDMA 是否开启RDMA 否

  • WITH_TIMER
    是否开启计时功能。如果开启会导致运行略慢,打印的日志变多,但是方便调试和测Benchmark

  • WITH_TESTING 是否开启单元测试 取决于是否寻找到GTEST

  • WITH_DOC 是否编译中英文文档 否

  • WITH_SWIG_PY
    是否编译PYTHON的SWIG接口,该接口可用于预测和定制化训练
    取决于是否寻找到SWIG

make

编译完成后会在build/python/dist目录下生成输出的whl包,可以选在在当前机器安装:

Make install

可以拷贝到目标机器安装:

pip install 目标路径/*.whl

如果之前机器上安装了旧版本的paddle,可以利用编译的二进制包,使用-U参数来升级安装:

pip install 目标路径/*.whl -U

创建测试数据库 TestDB。

www.hj8828.com,在docker中安装

百度把PaddlePaddle的编译环境打包成一个镜像,称为开发镜像,里面涵盖了
PaddlePaddle需要的所有编译工具。把编译出来的PaddlePaddle也打包成一个镜
像,称为生产镜像,里面涵盖了PaddlePaddle运行所需的所有环境。每次
PaddlePaddle发布新版本的时候都会发布对应版本的生产镜像以及开发镜像。运
行镜像包括纯CPU版本和GPU版本以及其对应的非AVX版本。他们会在
dockerhub.com 提供最新 的Docker镜像

使用Docker安装和运行PaddlePaddle可以无需考虑依赖环境即可运行。并且也可以在Windows的docker中运行。
如果你不了解docker的安装和基本操作,可以在这里http://docker-doc.readthedocs.io/zh\_CN/latest/
找到中文版的docker手册,找到你对应的操作系统开始学习使用docker。

在了解Docker的基本使用方法之后,即可开始下面的步骤:

执行下面的命令来下载PaddlePaddle的 Docker镜像,默认是cpu出版本的:

docker pull paddlepaddle/paddle

但镜像的默认地址依旧是国外的,为了方便在国内的开发者下载Docker镜像,百度提供了国内的镜像服务器供大家使用。我们使用paddle提供的一个国内的服务器下载:

docker pull docker.paddlepaddlehub.com/paddle

下载GPU版本(cuda8.0_cudnn5_avx_mkl)的Docker镜像:

docker pull paddlepaddle/paddle:latest-gpu #默认

docker pull docker.paddlepaddlehub.com/paddle:latest-gpu #推荐使用

下载使用不同的BLAS库的Docker镜像:

1> USE TestDB2> CREATE TABLE Inventory (id INT, name NVARCHAR, quantity INT)3> INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);4> GOChanged database context to 'TestDB'.(1 rows affected)(1 rows affected)

默认是使用MKL的镜像

docker pull paddlepaddle/paddle