今天一起来看看尝试下 Google Colab 工具,一款由 Google 出品,免费面向大众的、可使用 GPU、TPU 来训练模型的给力在线工具!!

初识 Google Colab

首先,你需要有一个 Google 账号,然后访问下面的网址,登陆谷歌账号即可。

​https://colab.research.google.com/notebooks/welcome.ipynb​

(可能某些小伙伴需要梯子,不过相信这些都难不倒勇于探索的你。)

Google Colab 是基于 Jupyter 编辑器的云端运行环境,意味着我们可以共享代码给其他人共同享用。

打开 Colab 页面后,我们可以自己创建一个 Python 记事本,当然也可以上传在本地写好的 ipynb 或 py 文件,具体如下图:

实战 Google Colab,一起用 GPU_docker

然后我们点击 “代码执行程序” 标签页,选择 “更改运行时类型”,就会弹出笔记本设置框,这里就可以选择是否使用 GPU 还是 TPU 或是不使用任何,看到这里,是不是瞬间感觉自己富有了很多,毕竟由 GPU 可以使用了啊!

连接自己的 Google 云盘

首先,你应该已经有了一个 Google 账号。

在新创建的 Jupyter 记事本中,输入如下的代码,并运行,结果如下:

实战 Google Colab,一起用 GPU_flask_02

这是出现了一个链接,点击该链接,授权账号登陆,将授权码复制并粘贴到图中的输入框中。

实战 Google Colab,一起用 GPU_docker_03

接下来肯能会需要第二次授权,同样的操作。

之后,挂载 Google Drive

就像在真实的 Linux 操作系统上一样(其实 Colab 就是一个真实的 Linux 虚拟机),创建 drive 文件夹,并挂载

实战 Google Colab,一起用 GPU_flask_04

最后我们验证下,看看是否成功连接到自己的 Google 云盘了

实战 Google Colab,一起用 GPU_tensorflow_05

查看 drive 文件夹,可以看到里面就是自己云盘上已经放置的文件。

从 Colab 下载文件

既然我们准备用 Colab 来训练模型,那么训练好的模型肯定是要保存在自己本地的,因为 Colab 为我们分配的虚拟机资源,一段时间就会回收。

其实不用慌,Colab 肯定也是提供了方便的下载途径的。

WAY 1.点开左侧的箭头按钮,选择文件 tab 页,就可以看到当前虚拟机下的所有文件,如:

实战 Google Colab,一起用 GPU_docker_06

我们选择 adc.json,右击选择 “下载”,就能通过浏览器下载该文件了

WAY 2.使用 Google Colab 提供的 API,其中有 files 这个库,直接使用 download 方法来下载

实战 Google Colab,一起用 GPU_flask_07

实战训练电影推荐模型

这里使用开源的项目:https://github.com/chengstone/movie_recommender

下载项目中的 movie_recommender.ipynb 文件,导入到 Colab 中,然后一步步的执行,等待模型训练好后,下载到本地即可。不得不说,使用 GPU,模型训练的就是快!

训练好模型后,当然时部署成服务,供自己学(装)习(逼)了,开干。

一、使用 Docker 安装 tensorflow

我使用的是 CentOS 服务器,具体的安装方法直接参考这里

​https://www.runoob.com/docker/centos-docker-install.html​

Docker 服务安装好之后,使用如下命令拉取镜像

1docker pull tensorflow/tensorflow:1.13.1-py3

至于为什么用 1.13.1 版本,因为 Google Colab 里默认的版本就是这个,所以这里就使用相同的版本了,为了避免发生一些未知的版本匹配问题。

下面用如下命令启动 docker

1docker run --name my-tensorflow -it -p 8888:8888 -v ~/tensorflow:/test/data tensorflow/tensorflow

将 Docker 容器中的 8888 端口映射到宿主机的 8888 端口上,这样,我们就能在外部访问容器中的 8888 端口服务了。

二、编写 Flask 服务

相关的推荐逻辑,都是按照这个开源项目已经提供好的,我们只有保证让 Flask 服务启动在 8888 端口即可,部分代码如下:

 1@app.route('/sametypemovie/<int:movieid>', methods=['GET'])
2def sametypemovie(movieid):
3    data = recommend_same_type_movie(movieid)
4    return jsonify(data), 200
5
6
7@app.route('/yourfavmovie/<int:userid>', methods=['GET'])
8def yourfavmovie(userid):
9    data = recommend_your_favorite_movie(userid)
10    return jsonify(data), 200
11
12
13@app.route('/otherfavmovie/<int:movieid>', methods=['GET'])
14def otherfavmovie(movieid):
15    data = recommend_other_favorite_movie(movieid)
16    return jsonify(data), 200
17
18
19if __name__ == "__main__":
20    app.run(host='0.0.0.0', debug=True, port='8888')

三、部署上线并测试

将代码上传至宿主机的 /root/tensorflow 目录下,然后进入 docker 容器内,启动 flask 服务

 1root@bb09aa2a7097:/test/data# python movie_recommender.py 
2 * Serving Flask app "movie_recommender" (lazy loading)
3 * Environment: production
4   WARNING: Do not use the development server in a production environment.
5   Use a production WSGI server instead.
6 * Debug mode: on
7 * Running on http://0.0.0.0:8888/ (Press CTRL+C to quit)
8 * Restarting with stat
9 * Debugger is active!
10 * Debugger PIN: 326-836-556

在浏览器中输入如下:

实战 Google Colab,一起用 GPU_docker_08

服务正常,后面再优化下部署方式,是不是就可以线上使用了呢。

四、Nginx 部署

这里使用 Nginx 来部署,因为服务器上还运行着其他的服务,所以就选用了 8880 端口来作为监听端口,最后的效果如下:

实战 Google Colab,一起用 GPU_flask_09