Colaboratoryについて(まとめ)

Google Colaboratoryについて(まとめ)

Colaboratory – Google – Research at Google

基本的なFAQ

Colaboratory – Frequently Asked Questions – Google

以下,手探り(随時追記)

情報が全然ないので,手探りで纏めていく(徐々に追記していく予定).
以下は基本的に一般論ではなく経験論だと思うべき.
取り敢えず,誰かと「共有」するという目的を達するに当たって,
最低限,必要だと思われる形式知を纏められればなあ.

Numbaが使える様になった

GPUが使える様になった事で,Numbaも使える様になった.

関連:
ColaboratoryでNumbaを使う

 
Cythonを使える様にする方法は,未だに分からない.

 
 
・GPUが使えるようになった

「Hello Colaboratory」にもいつの間にか説明が追加されていた.

ハードウェアアクセラレータとしてGPUを選択すると,
/proc/driver/内に「nvidia/ nvidia-uvm/」が出現する.
(通常モードでは「nvram rtc」しかない)

import tensorflow as tf
tf.test.gpu_device_name()

‘/device:GPU:0’
(未選択時は「”」)

気になるスペックは

GPU ID 1: Tesla K80: UVM-GPU-978ffb83-beff-792b-e4cb-a1ff0dd4f4b3
retained_count        1
ecc                   enabled


Model:       Tesla K80
IRQ:         33
GPU UUID:    GPU-978ffb83-beff-792b-e4cb-a1ff0dd4f4b3
Video BIOS:      80.21.25.00.02
Bus Type:    PCI
DMA Size:    40 bits
DMA Mask:    0xffffffffff
Bus Location:    0000:00:04.0
Device Minor:    0

NVIDIA Tesla K80を使用しているっぽい.
 
 

・ノートブックを新規作成する時にPython2/Python3を選べる様になった
ColaboratoryでPython3(Python 3.6.3)が使える様になっていた

 
 

・ColaboratoryはPython2.7(python2.7-2.7.14)
ー現状はカーネルの切り替え機能はない
ー最初におまじないを入れておけば使用感は殆ど変わらない

from __future__ import absolute_import, division, print_function, unicode_literals
from builtins import bytes, chr, dict, input, int, object, open, pow, range, round, str, map, zip
from future.utils import integer_types
from future import standard_library
standard_library.install_aliases()

math.gcd()とか,itertools.accumulateとか,
無いものはどうしようもないけど.

ーu’/usr/bin’の中にPython 3.6(3.6.3)が入っている
ー「!python3.6 example2.py」とすれば処理させられそう(できた)

Colaboratory(Jupyter)上でインタラクティブモードは使えないので,
あくまでこれはPython 3.6.3呼び出せそうっていう例だけど.

>>!python3.6
Python 3.6.3 (default, Oct 3 2017, 21:45:48)
[GCC 7.2.0] on linux
Type “help”, “copyright”, “credits” or “license” for more information.
>>
Traceback (most recent call last):
File “”, line 1, in
KeyboardInterrupt
>>

FireShot Capture 781 - Untitled6.ipynb - Colaboratory_ - https___colab.research.google.com_

非常に簡単なテスト.

%%writefile example2.py
def main():
  import math
  res = math.gcd(15, 25)
  print(res)
  with open('output.txt', 'w') as f:
    f.write(str(res))
  print('Done')


if __name__ == '__main__':
    main()

Overwriting example2.py

!python3.6 example2.py

5
Done

cat output.txt

5

という感じで,いちおうColaboratory上でPython 3.6.3が使える.
(そうじゃないんだ……感満載だけどね(´・ω・`))
(でも,無料で「n1-highmem-2 instance」相当のVMに処理投げられると思えば)

ーColaboratory上で「.py」を実行するだけなら以下

%%writefile example.py
def f():
  print('Hello! Python 2.7!')

して「example.py」を作って,

execfile('example.py')

f()

Hello! Python 2.7!

・ColaboratoryはChromeのデスクトップ版でのみ動作
ーでも,ホームを開いてからFile -> Open Drive notebookの順で開けば
 スマホからでもTabletからでも,Chromeであればどこからでも開けた
(ただし,キーボードがないと操作性はかなり悪い)
ー仮想マシン上でコードが走るので,実行環境に依存せず高速処理が期待できる
ースマホから操作する場合,Google日本語入力を使っているとバックスペースが使えない
ースマホやTabletでダブルタッチしてもダブルクリックとして認識されない(され難い)
ーなんとなく使用感,Gboardを使っていると不便はなかった
ーXperia Z4 Tablet + BKB50だとPC並みの操作性(二画面にすると文字小さっ)

・Colaboratoryのノートブックは全てGoogle Driveに保存される
ーGoogle Driveのマイドライブ直下に「Colab Notebooks」というディレクトリが作成される
ーGoogle Driveの検索機能でノートブック内文字列までしっかり検索可能(これは便利)
ーVM内をfindで探してもそれっぽいディレクトリはみつからなかった
(仮想マシン上で例えばマウントドライブとして繋がっていたり
 してくれるとPC↔VMでのデータやり取り便利だと思ったんだけど)
(そういう事がしたい場合,大人しく I/O example notebookを参考にするしか無い)
(でも手元のエクセル,CSVファイルをちょっと分析したい時正直凄く面倒臭い)
(Google Spread Sheet入出力モジュールがこんな所で役立つとは……)
FUSEを使用してGoogle Driveをマウントする事でファイルをロードできる様に?
参考:
From colab directly manipulate sqlite3 format data in Google drive – StackOverflow

・PC↔VM(Colaboratory)でファイルをやり取り(upload/download)する方法
(折角Google Driveを用いるんだから,もうちょっとデフォルトでその辺上手く……ねえ?)
(それを自分で実現するのがFUSEを用いてGoogle Driveをマウントする方法(以下参照))
ーどれも一長一短で正直一手間感は拭えない
ーイメージ的な話だけどローカルを排せるならサーバーサイドに処理できるならそうした方が楽
(ローカルにデータを置かずにURIで処理できる構造を意識する的な)
(「!wget」でダウンロードできるし,PythonでrequestsモジュールやPandasモジュールを使える)
I/O example notebook を参考にupload/download
(左サイドバーの「Code snippets」にも一部について書いてある)
(多分1番一般的な方法は「google.colab.files.upload/google.colab.files.download」)
(ただ,たまに引っかかるというか,処理が遅かったり失敗する場合がある様な……不便)
ーGoogle DriveやDropboxで共有リンクを作成して「!wget」でVMローカルにファイルをダウンロード
(Colaboratoryを便利に使おうと思うと,何気にLinuxコマンドを色々重宝する)
ーFUSEを使用してGoogle Driveをマウント(12時間以内に頻繁にデータをやり取りする場合有効か)
参考:
From colab directly manipulate sqlite3 format data in Google drive – StackOverflow

関連:
Colaboratoryで簡単便利にファイルのやり取りをする方法

ーGoogle Cloud Storageにデータファイルを保存する方法
gsutil ツールを用いると簡便にデータのやり取りができるらしい.
GCPユーザならアリな方法かも知れない.

参考:
wish to use colaboratory. What is simplest way to do a get drive file to python (encapsulated)? – StackOverflow

ーノートブックのファイルサイズ上限は1ファイル当たり7MB(だったかな)
(↑飲みながら調べていてReferenceを失念したので,改めて調べたら書き直す↑)

(ちょっと調べ直したけど,みつからない……あれは……夢でもみたのか……)
まあいいや.曖昧だけど,どっかでみた情報をメモっておく.
ーーー曖昧(後で調べ直したら再編集する)ーーー
・一つのノートに最大100アカウント接続できる?
ファイル共有はGoogle Driveに準じて,
「同時に100人までの人が編集してコメント可能」
「最大200人のユーザーまたはグループとファイルを共有可能」
だと思われる(ちなみに,実行環境はそれぞれのVM).
参考:
Share files from Google Drive – Google Drive Help
・ノートは同時に何個でも開けそう(PCが先に悲鳴をあげそうだけど)
ー同時に処理できるインスタンス数は不明(2,3のタブで同時に違う処理はできた)
・ノート1つのファイルサイズ上限は7MB?
(これをどこで,何でみたんだ……)
(時間がある時に,検索履歴を洗っていく……)
ーーーここまで,非常に曖昧ーーー

・Colaboratoryの方が数倍以上高速
ー僕の環境では(Windows 10 64 bit, Core i 5 5300, メモリ8GB,JupyterLab + Python 3.6.3),Colaboratoryの方が2-5倍速い
ー日本語の記事では,「Colaboratoryの方が遅い」という記事もあった
(要は僕のPCより遥かに良いPCって事だろう……(´・ω・`))

まあ,速さを期待して使うものではないと思うので,
ぶっちゃけそんなに気にする事じゃないんだろう(負け惜しみでは無い)

ちなみに,気になるVM(仮想マシン)のシステム情報は,

「cat /etc/lsb-release」

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=17.10
DISTRIB_CODENAME=artful
DISTRIB_DESCRIPTION=”Ubuntu 17.10″

「cat /proc/version」

Linux version 4.4.86+ (chrome-bot@build12-m2.golo.chromium.org) (gcc version 4.9.x 20150123 (prerelease) (4.9.2_cos_gg_4.9.2-r166-0c5a656a1322e137fa4a251f2ccc6c4022918c0a_4.9.2-r166) ) #1 SMP Thu Dec 7 20:11:11 PST 2017

「cat /proc/cpuinfo」

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 79
model name : Intel(R) Xeon(R) CPU @ 2.20GHz
stepping : 0
microcode : 0x1
cpu MHz : 2200.000
cache size : 56320 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms rtm rdseed adx xsaveopt
bugs :
bogomips : 4400.00
clflush size : 64
cache_alignment : 64
address sizes : 46 bits physical, 48 bits virtual
power management:

processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 79
model name : Intel(R) Xeon(R) CPU @ 2.20GHz
stepping : 0
microcode : 0x1
cpu MHz : 2200.000
cache size : 56320 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms rtm rdseed adx xsaveopt
bugs :
bogomips : 4400.00
clflush size : 64
cache_alignment : 64
address sizes : 46 bits physical, 48 bits virtual
power management:

「cat /proc/meminfo」

MemTotal: 13341992 kB
MemFree: 8810972 kB
MemAvailable: 12571952 kB
Buffers: 103532 kB
Cached: 3561384 kB
SwapCached: 0 kB
Active: 1303896 kB
Inactive: 2794772 kB
Active(anon): 434072 kB
Inactive(anon): 324 kB
Active(file): 869824 kB
Inactive(file): 2794448 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 372 kB
Writeback: 0 kB
AnonPages: 433784 kB
Mapped: 144536 kB
Shmem: 656 kB
Slab: 372844 kB
SReclaimable: 350124 kB
SUnreclaim: 22720 kB
KernelStack: 3328 kB
PageTables: 5796 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 6670996 kB
Committed_AS: 1619832 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 61428 kB
DirectMap2M: 4132864 kB
DirectMap1G: 11534336 kB

GPUは持っていないかも?
vCPUが2コアなので,VMがほぼネイティブ動作するとしても(実効性が良くても),
それなりに良いPCを持っている人はその方が純粋にスペックが高いかも.
TensorFlowのデモノートとかあるから,期待しちゃうけども,
12時間以上連続稼動できないし,あまりがっつりとした処理はさせられない感.
それでも,「無料で使用できるプロダクト」と考えると素晴らしいと思うし,
少なくとも,僕の手元にあるオンボロPC5台を組み合わせるより良いスペック(´・ω・`)

というか,GCPで云えば「n1-highmem-2 instance」並みのスペック?
(月額$60.50の価値がある!?これが無料で利用できるのは有り難い)
(無料で仮想通貨のマイニングも!?)
(……月400円にもならないけど)

・Colaboratory(VM)の動きがもっさりしてきたら「Restart runtime」しよう
語弊があるかも知れないけど,VMもPCと一緒.
長時間Colaboratoryを触ったり,重たい処理を何回も走らせていると,
どうも動きがもっさりして重たくなってくる事がある(そうそう無いけど).
そういう時は,「Restart runtime」をすると良い.

・Colaboratoryで日本語グラフ(日本語ラベル)を描くには
ー「!apt-get -y install fonts-ipafont-gothic」
 して日本語フォントを入れる
ーRestart runtimeする
ー「sns.set(style=’darkgrid’, palette=’deep’, font=’IPAGothic’, font_scale=2)」
(まだ豆腐(駄目)だったら)
ーキャッシュをクリアする(「rm fontList.json」)
(「cd /content/.cache/matplotlib」下の「fontList.json」が多分キャッシュ)
ー再度,Restart runtimeする
(結局,12時間したら消えるので日本語を使わないって割り切った方が楽……)
追記:
以下を定式化しておくと楽.
1.!apt-get -y install fonts-ipafont-gothic
(フォントプロパティを用いていちいちパス指定するなら2.以降は不要)
(FontProperties(fname=r’/usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf’))
2.rm /content/.cache/matplotlib/fontList.json
3.Restart runtime
4.sns.set(style=’darkgrid’, palette=’deep’, font=’IPAGothic’, font_scale=2)

・仮想マシンのライフタイム(存続時間というか有効期限というか)
ーVMの最大有効時間は12時間(12時間以上の処理はできない??)
ーアイドル状態が90分続くとタイムアウト
ーアクティブではないノート(ウィンドウ)は10-30分程度で切断される様な感じ

・Colaboratoryにデフォルトで入っているモジュール
Colaboratoryに入っているモジュール一覧 を参照
ー上記の通り,VMのライフタイムは12時間
ー標準で入っていないモジュールを用いる場合はその都度設定する必要性(下記参照)

・Colaboratoryでモジュールや環境をカスタム(新規追加)する
ー「!apt-get」や「!pip」が使用可能
ーVMの最大ライフタイムが12時間らしいので適宜環境をカスタムするしかない
ー例えば,Pandasでエクセル(.xls/.xlsx)をロードしたい時は
 import前に「!pip install -q xlrd」行を書く様にする等

・赤い輪っかと黄色い輪っかの違い
ー通常は黄色い○が2つなのに赤い○になる事がある?
ー何故そうなるのか,それが何を意味しているのか不明
ーエラーとか例外処理とかが発生した時かな?

無題

ー通常:黄色,エラー:赤色,実行中:灰色っぽい

・Colaboratoryに標準で入っている使えそうなもの色々(バージョン)
ーperl, bash, awk,node.js等々

!python2 --version


Python 2.7.14
!python3 --version


Python 3.6.3
!node -v


v6.10.0
!perl --version


This is perl 5, version 26, subversion 0 (v5.26.0) built for x86_64-linux-gnu-thread-multi
(with 56 registered patches, see perl -V for more detail)

Copyright 1987-2017, Larry Wall
!bash --version


GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
!awk -W version


mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan

compiled limits:
max NF             32767
sprintf buffer      2040
!sed --version


sed (GNU sed) 4.4
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


!grep --version


grep (GNU grep) 3.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
!egrep --version


grep (GNU grep) 3.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and others, see .
!git --version


git version 2.14.1

 
 
関連:
Colaboratoryは速い?

Colaboratoryに入っているモジュール一覧

Colaboratoryでノートブックの共有ができない

Colaboratoryで「豆腐」をなんとかしたい

広告
カテゴリー: 未分類 パーマリンク

Colaboratoryについて(まとめ) への14件のフィードバック

  1. ピンバック: 再帰関数を高速化するには? | 粉末@それは風のように (日記)

  2. ピンバック: Colaboratoryで簡単便利にファイルのやり取りをする方法 | 粉末@それは風のように (日記)

  3. ピンバック: Colaboratory便利なのに…… | 粉末@それは風のように (日記)

  4. ピンバック: Colaboratoryで「豆腐」をなんとかしたい | 粉末@それは風のように (日記)

  5. ピンバック: ColaboratoryでPython3(Python 3.6.3)が使える様になっていた | 粉末@それは風のように (日記)

  6. ピンバック: bashで遊ぶ4 | 粉末@それは風のように (日記)

  7. ピンバック: bashで遊ぶ5 | 粉末@それは風のように (日記)

  8. ピンバック: bashで遊ぶ6 | 粉末@それは風のように (日記)

  9. ピンバック: bashで遊ぶ7 | 粉末@それは風のように (日記)

  10. ピンバック: bashで遊ぶ8 | 粉末@それは風のように (日記)

  11. ピンバック: bashで遊ぶ9 | 粉末@それは風のように (日記)

  12. ピンバック: bashで遊ぶ10 | 粉末@それは風のように (日記)

  13. ピンバック: Colaboratoryに入っているモジュール一覧 | 粉末@それは風のように (日記)

  14. ピンバック: ColaboratoryでNumbaを使う | 粉末@それは風のように (日記)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

w

%s と連携中