自己的電腦跑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 GPUcomplex_model_m_gpu
: Four NVIDIA Tesla K80 GPUscomplex_model_l_gpu
: Eight NVIDIA Tesla K80 GPUsstandard_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來研究哪個地方導致程序出錯了。
而在我的雲端存儲中,輸出是這個樣子的:
好啦~大概就是這樣吧。如果你有任何疑問歡迎留言提問哈。