自己的电脑跑cnn, rnn太慢? 还在为自己电脑没有好的gpu而苦恼? 程序一跑一俩天连睡觉也要开着电脑训练?

如果你有这些烦恼何不考虑考虑使用谷歌的云平台呢?注册之后即送300美元噢~下面我就来介绍一下谷歌云平台的使用。

1 配置谷歌云平台项目(GCP Project)

https://console.cloud.google.com/cloud-resource-manager

按照谷歌的向导你可以一步一步创建一个新的项目。这个项目就是你本地的项目并想放在云上跑的东西。

点击创建项目,输入新建的项目名称,等一下下你的新项目就创建好啦。新的项目的dashboard如下所示。

2 将这个项目绑定一个付款账号,当然谷歌给了你300刀,如果你只是做一些小项目仅供个人学习的话300刀应该是足够的。

https://cloud.google.com/billing/docs/how-to/modify-project

如果你还没有一个付款账号,会提示你先创建一个账号, 总之你要关联你的账号到你新建的项目。

设置完毕后你会看到谷歌给你的赠金信息

3.启用API,在 Google Cloud Platform 中注册您的应用以使用 Google Cloud Machine Learning EngineGoogle Compute Engine API

https://console.cloud.google.com/flows/enableapi?apiid=ml.googleapis.com,compute_component

选择要注册API的项目。显示正在启用API。你讲看到下面这个界面

4 设置凭据

新建一个服务账号,角色为项目的所有者。点击创建后一个包含了你的私钥的json文件将下载到你的本地所指定的路径。

设置环境变量GOOGLE_APPLICATION_CREDENTIALS为你保存以上json文件的路径。比如mac os用户在terminal中输入如下(引号中为你本地的json文件路径):

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

5 当以上都设置完毕后,接下来要下载和初始化cloud sdk啦

https://cloud.google.com/sdk/docs/

下载完成后,初始化cloud sdk~

在terminal中进入你存放sdk的路径,输入一下

> sh ./google-cloud-sdk/install.sh

选择是否帮助完善cloud sdk

选择是否需要更新$PATH, 如果更新你可以在命令行中任何路径下使用google cloud命令。然后会提示你输入你个路径,或直接为空使用默认。

这里我选择的是为空。如果是mac用户不知道会不会遇到和我相同的问题,就是路径没有设置成功。我的解决办法如下:

在命令行中source completion.bash.inc 和 path.bash.inc两个文件。

USER-MBP:Google_Cloud_Compute_Engine$ source /Users/.../.../.../google-cloud-sdk/path.bash.inc

USER-MBP:Google_Cloud_Compute_Engine$ source /Users/.../.../.../google-cloud-sdk/completion.bash.inc

运行gcloud init初始化sdk

./google-cloud-sdk/bin/gcloud init

以上我们完成了想要使用谷歌深度学习平台的配置,总结一下就是创建一个项目,设置结算信息关联项目,创建服务账号密钥并设置环境变量, 下载初始化sdk。

接下来的重头戏当然就是把我们本地的代码放到谷歌云上训练啦~~~

1.打包你的训练模型

https://cloud.google.com/ml-engine/docs/packaging-trainer

第一步 使用推荐的项目结构

创建一个空的setup.py文件, 在trainer文件夹中创建一个空的__init__.py

2. 确认你云端上保存你的所用中间或最终输出结果(比如checkpoint文件)的路径, 这一步很重要!!!!否则你不知道在哪找你训练的参数呀!

在Google Cloud Platfrom左侧的导航栏中选择存储,创建存储分区

如上图所示,创建一个分区,选择regional,位置为us-east1可以使用gpu!!!而且比较便宜呀~~~

这样你在云端上就有了一个路径,比如我的情况就是gs://yzm_bucket

创建完成后,在你本地的代码中把你所有的输出路径都要替换成你的云端路径。这样在云端训练时才能把结果也保存在云端。

比如这样:path_to_latest_checkpoint_file = saver.save(sess, 'gs://yzm_bucket/log/latest.ckpt')

3. 确认本地代码中所需要的依赖

需要查看cloud ml runtime的版本信息 -> https://cloud.google.com/ml-engine/docs/runtime-version-list

目前的化Cloud ML runtime最新版本为1.6, 支持python 3.5。 查看你想使用的版本有没有所有你所依赖的包。 如果你的程序用pip安装了一些python模块(如pillow)但是使用的runtime版本中并不包含这些包,你需要手动设置你的包依赖。 请在setup.py中(如果你用标准的项目结构,就是你traniner的根目录即它的上一层)添加如下信息:

from setuptools import find_packages
from setuptools import setup REQUIRED_PACKAGES = ['some_PyPI_package>=1.0'] setup(
name='trainer',
version='0.1',
install_requires=REQUIRED_PACKAGES,
packages=find_packages(),
include_package_data=True,
description='My trainer application package.'
)

4. 使用gcloud ml-engine jobs submit training提交你要运行的训练任务

https://cloud.google.com/sdk/gcloud/reference/ml-engine/jobs/submit/training

gcloud ml-engine jobs submit training JOB 
--module-name=MODULE_NAME [--config=CONFIG] [--job-dir=JOB_DIR] [--labels=[KEY=VALUE,…]]
[--package-path=PACKAGE_PATH] [--packages=[PACKAGE,…]] [--python-version=PYTHON_VERSION]
[--region=REGION] [--runtime-version=RUNTIME_VERSION] [--scale-tier=SCALE_TIER]
[--staging-bucket=STAGING_BUCKET] [--async | --stream-logs] [GCLOUD_WIDE_FLAG …] [-- USER_ARGS …]

比如像这样:

  $ gcloud ml-engine jobs submit training my_job \
--module-name trainer.task \
--staging-bucket gs://my-bucket \
--package-path /my/code/path/trainer \
--packages additional-dep1.tar.gz,dep2.whl
gcloud ml-engine jobs submit training 后面是任务的名称(唯一标识任务的名称,不可以和之前提交的任务名重复),
module-name 为trainer.task, task就是你程序的入口python文件,在标准项目结构中叫做task.py的那个文件, trainer为标准项目结构中trainer文件夹。
staging-bucket 为google cloud上的路径,指定你把你的代码文件上传到哪在运行程序的时候可以在那个路径上找到你的源码。这里存在了叫做my-bucket的云路径上。
package-path 为你本地到trainer文件夹的路径,也就是你把trainer文件夹存在了本地的什么位置 除了以上参数你可能还需要以下参数
[--job-dir=JOB_DIR] 
job-dir 指明了在云端你想要把输出存在什么位置, 如果你已经在代码中指明,此步可以省略。
[--python-version=PYTHON_VERSION] 
python-version:如果你是用python 3,请明确在这里声明否则默认为python 2
[--runtime-version=RUNTIME_VERSION] 
runtime-version:最新版本为1.6,支持python 3
如果你考虑使用GPU,也请设置参数如下。
https://cloud.google.com/ml-engine/docs/using-gpus

To use GPUs in the cloud, configure your training job to access GPU-enabled machines:

Set the scale tier to CUSTOM.

Configure each task (master, worker, or parameter server) to use one of the GPU-enabled machine types below, based on the number of GPUs and the type of accelerator required for your task:

  • standard_gpu: A single NVIDIA Tesla K80 GPU
  • complex_model_m_gpu: Four NVIDIA Tesla K80 GPUs
  • complex_model_l_gpu: Eight NVIDIA Tesla K80 GPUs
  • standard_p100: A single NVIDIA Tesla P100 GPU (Beta)
  • complex_model_m_p100: Four NVIDIA Tesla P100 GPUs (Beta)

在本地保存config.yaml文件,并在里写入你想要指定的gpu配置信息。

trainingInput:
  scaleTier: CUSTOM
  masterType: complex_model_m_gpu
  workerType: complex_model_m_gpu
  parameterServerType: large_model
  workerCount: 9
  parameterServerCount: 3
如果是新手scaleTier推荐使用BASIC_GPU而不是CUSTOM
然后在命令中多加一个参数

--config /my/code/path/to/config.yaml

比如我的情况,代码如下:

gcloud ml-engine jobs submit training beta330  --module-name trainer.task --staging-bucket gs://yzm_bucket --package-path /Users/wenlu/PycharmProjects/Google_Cloud_Compute_Engine/yzm_recognition/trainer --python-version=3.5 --runtime-version=1.6 --config /Users/wenlu/PycharmProjects/Google_Cloud_Compute_Engine/yzm_recognition/trainer/config.yaml

这就是在谷歌云端跑tensorflow的全部啦~~~~

成功的化,terminal会出现以下

Job [beta330] submitted successfully.

Your job is still active. You may view the status of your job with the command

$ gcloud ml-engine jobs describe beta330

or continue streaming the logs with the command

$ gcloud ml-engine jobs stream-logs beta330

jobId: beta330

state: QUEUED

在谷歌云端机器学习引擎中的job中出现如下:

你可以即时的查看日志信息,什么地方出错了输出的loss是多少了准确率已经到多少了之类之类的~~如果失败了你也可以看到traceback来研究哪个地方导致程序出错了。

而在我的云端存储中,输出是这个样子的:

好啦~大概就是这样吧。如果你有任何疑问欢迎留言提问哈。

TensorFlow-谷歌深度学习库 手把手教你如何使用谷歌深度学习云平台的更多相关文章

  1. 不用写代码就能实现深度学习?手把手教你用英伟达 DIGITS 解决图像分类问题

    2006年,机器学习界泰斗Hinton,在Science上发表了一篇使用深度神经网络进行维数约简的论文 ,自此,神经网络再次走进人们的视野,进而引发了一场深度学习革命.深度学习之所以如此受关注,是因为 ...

  2. SpringCloud学习之手把手教你用IDEA搭建入门项目(三)

    本篇博客是承接上一篇<手把手教你用IDEA搭建SpringCloud入门项目(二)>,不清楚的请到我的博客空间查看后再看本篇博客,上面两篇博客成功创建了一个简单的SpringCloud项目 ...

  3. SpringCloud学习之手把手教你用IDEA搭建入门项目(二)

    本篇博客是承接上一篇<手把手教你用IDEA搭建SpringCloud入门项目(一)>,不清楚的请到我的博客空间查看后再看本篇博客 1)先创建一个Eureka服务注册中心模块,用来作为服务的 ...

  4. SpringCloud学习之手把手教你用IDEA搭建入门项目(一)

    SpringCloud简单搭建 jdk:1.8开发工具:IDEA注:需要了解springcloud 1.创建最简单的Maven项目 1)开始创建一个新的项目 ​ 2)创建一个空模板的maven项目,用 ...

  5. 《手把手教你学C语言》学习笔记(2)---学习C语言的目标和方法

    一.学习C语言的目标主要是: 熟练掌握C语言的关键字,语法规则,程序控制等: 掌握基本的数据结构,数组.链表.栈和队列等: 掌握C语言中指针和内存.数组与指针.函数与指针.变量和指针.结构体和指针.硬 ...

  6. 《手把手教你学C语言》学习笔记(1)---C语言的特点

    学习C语言的原因,主要是需要使用C语言编程,我用故我学,应该是最主要的原因了. C语言的定位:C语言严格意义上只能算是中级语言,是面向过程编程语言的集大成者,虽然这种语言有很多的问题,但总体而言是瑕不 ...

  7. 手把手教你学node.js之学习使用外部模块

    学习使用外部模块 目标 建立一个 lesson2 项目,在其中编写代码. 当在浏览器中访问 http://localhost:3000/?q=alsotang 时,输出 alsotang 的 md5 ...

  8. 《手把手教你学C语言》学习笔记(8)--- 运算符和表达式

    C语言编程的核心是指针和库,而库的核心就是函数,函数的基本组成部分就是语句. C语言合法表达式加上分号(语句结束符)构成C函数的基本部分语句.如果只有分号没有表达式就构成空语句,空语句常常用来形成占位 ...

  9. 《手把手教你学C语言》学习笔记(4)---代码规范

    编程过程中需要遵守编译器的各种约定,例如以下代码: 1 #include <stdio.h> 2 3 int main(int argc, char **argv) 4 { 5 print ...

随机推荐

  1. 【BZOJ3160】万径人踪灭(FFT,Manacher)

    [BZOJ3160]万径人踪灭(FFT,Manacher) 题面 BZOJ 题解 很容易想到就是满足条件的子序列个数减去回文子串的个数吧... 至于满足条件的子序列 我们可以依次枚举对称轴 如果知道关 ...

  2. 【CJOJ1167】【洛谷1894】[USACO4.2]完美的牛栏

    题面 Description 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来 ...

  3. 【noip模拟】tree

    000 ms        Memory Limit: 128 MB [吐槽] 点分治点分治点分治 嗯..场上思考树状数组的时候好像傻掉了..反正就是挂了就是了.. [题解] 首先如果没有环的话就是一 ...

  4. 如何在WordPress文本小工具中使用PHP

    只需添加以下代码片段到你当前主题的functions.php文件 add_filter('widget_text', 'php_text', 99); function php_text($text) ...

  5. 【前端单元测试入门03】Sinon

    前端测试存在的问题 在讲Sinon之前,我们得先讲一下在学习了Mocha.chai以及enzyme之后,我们的前端测试还存在的一些问题. 比如前台测试需要与后台交互,获取后台数据后再根据相应数据进行测 ...

  6. php基础知识(三)---常用函数--2017-04-16

    常用函数如下:(红色为重点) 1.取字符串的长度 echo strlen("hello"); 2.echo strcmp("字符串1","字符串2&q ...

  7. Maven 项目生成jar运行时提示“没有主清单属性”

    新建了一个Maven的项目,mvn compile和mvn package后生成了jar文件,然后直接到target目录下去执行java -jar xxx.jar命令运行jar包时出现了"x ...

  8. python爬微信公众号前10篇历史文章(3)-lxml&xpath初探

    理解lxml以及xpath 什么是lxml? python中用来处理XML和HTML的library.与其他相比,它能提供很好的性能, 并且它支持XPath. 具体可以查看官方文档->http: ...

  9. The based of tuning

    调优目的: 1.  提高资源利用率 2.  找出性能瓶颈并缓解 3.  通过性能管理实现合理的资源分配,提升硬件性价比 调优分层及效率问题: 业务级调优  eg:1)网站使用的Apache—>业 ...

  10. 使用IDEA搭建Spring Boot入门项目

    简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置 ...