今天一起来看看尝试下 Google Colab 工具,一款由 Google 出品,免费面向大众的、可使用 GPU、TPU 来训练模型的给力在线工具!!
初识 Google Colab
首先,你需要有一个 Google 账号,然后访问下面的网址,登陆谷歌账号即可。
https://colab.research.google.com/notebooks/welcome.ipynb
(可能某些小伙伴需要梯子,不过相信这些都难不倒勇于探索的你。)
Google Colab 是基于 Jupyter 编辑器的云端运行环境,意味着我们可以共享代码给其他人共同享用。
打开 Colab 页面后,我们可以自己创建一个 Python 记事本,当然也可以上传在本地写好的 ipynb 或 py 文件,具体如下图:
然后我们点击 “代码执行程序” 标签页,选择 “更改运行时类型”,就会弹出笔记本设置框,这里就可以选择是否使用 GPU 还是 TPU 或是不使用任何,看到这里,是不是瞬间感觉自己富有了很多,毕竟由 GPU 可以使用了啊!
连接自己的 Google 云盘
首先,你应该已经有了一个 Google 账号。
在新创建的 Jupyter 记事本中,输入如下的代码,并运行,结果如下:
这是出现了一个链接,点击该链接,授权账号登陆,将授权码复制并粘贴到图中的输入框中。
接下来肯能会需要第二次授权,同样的操作。
之后,挂载 Google Drive
就像在真实的 Linux 操作系统上一样(其实 Colab 就是一个真实的 Linux 虚拟机),创建 drive 文件夹,并挂载
最后我们验证下,看看是否成功连接到自己的 Google 云盘了
查看 drive 文件夹,可以看到里面就是自己云盘上已经放置的文件。
从 Colab 下载文件
既然我们准备用 Colab 来训练模型,那么训练好的模型肯定是要保存在自己本地的,因为 Colab 为我们分配的虚拟机资源,一段时间就会回收。
其实不用慌,Colab 肯定也是提供了方便的下载途径的。
WAY 1.点开左侧的箭头按钮,选择文件 tab 页,就可以看到当前虚拟机下的所有文件,如:
我们选择 adc.json,右击选择 “下载”,就能通过浏览器下载该文件了
WAY 2.使用 Google Colab 提供的 API,其中有 files 这个库,直接使用 download 方法来下载
实战训练电影推荐模型
这里使用开源的项目: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
在浏览器中输入如下:
服务正常,后面再优化下部署方式,是不是就可以线上使用了呢。
四、Nginx 部署
这里使用 Nginx 来部署,因为服务器上还运行着其他的服务,所以就选用了 8880 端口来作为监听端口,最后的效果如下: