Google Colaboratoryとは
一言で言えば、Google版Jupyter Notebook。Googleが提供する無料サービスの一つで、クラウド上でPythonの記述、実行ができます。
ブラウザ
とgoogleアカウント
さえあれば
Pythonの実行環境をサクッと3秒で構築できてしまいます。
クロスプラットフォームな実行環境であるため共同開発での差異が小さく1、
また各ノートブックがサンドボックスであり初期化 → 実行
や新規作成 → 破棄 → 新規作成
のような使い切り開発や、
ノートブックのコピー → 破棄
のような使い捨てもできます。
Colaboratory へようこそ
出来たこと
機械学習周りいろいろ
githubとの連携
簡易のhttp.server、CGIサーバーの起動
Googleの各無料サービスとの連携、APIの利用
Flask、FastAPI、Streamlit、SQLAlchemyの利用、連携
Ngrok、localtunnelの利用
その他いろいろ
各名称
①メニューバー
各設定、操作ができます。
ファイル
、編集
、表示
、挿入
、ランタイム
、ツール
、ヘルプ
②左ペイン
アイコンをクリックすると、 スペース③
へ各ブラウザを表示することができます。
スペース③
へ各ブラウザを表示することができます。③ファイルブラウザ
②左ペイン
の一番下ファイル
をクリックすると出現します。
②左ペイン
の一番下ファイル
をクリックすると出現します。左上からファイルの選択
、状態の更新
、ドライブ
アイコンが並びます。
ドライブアイコン
からGoogleドライブをマウントすることができます。
カレントディレクトリは/content
です。
!echo > xxx.txt
!pwd
!ls
/content
sample_data sample.py xxx.txt
④⑤セル
④テキストセル
と⑤コードセル
があります。
④テキストセル
と⑤コードセル
があります。コードセル
の中でシステムコマンド
やマジックコマンド
が使えます。
記法 | ||
---|---|---|
システムコマンド | ! | シェルコマンドなど |
マジックコマンド | % %% |
ラインマジック セルマジック |
先頭に!や%を書きます。
例
!echo hello world
%history
%%bash
⑥エディタ
ファイルや画像、各情報を表示・出力します。
テキストエディタでは一括置換などのショートカットキーがいくつか用意されています。
また、⑤コードセル
にも一部テキストエディタとしての機能が備わっています。
編集後、しばらく待つ
か、タブの上をワンクリック
すると上書き保存されます。
⑦ランタイムやセッションの状況
ランタイムが起動しているか視認できたり、セッション管理が行えます。
ショートカットキー
キー | 操作 | 場所 |
---|---|---|
Shift + Enter
|
セルの実行 | コードセル |
Ctrl + D
|
一括編集 | コードセル エディタ |
便利シート
基本
コードセルに書く。
システムコマンド
やマジックコマンド
は、pythonコード
と一緒に書くことができます。
例
print("start") #python
# シェルコマンド
!ls
print("end") #python
start
sample_data sample.py xxx.txt
end
各コードセルの変数の値は保持されます。
a=2
print(a+3)
5
コードセルで保持された変数をシステムコマンドで使う。
$変数名
でシステムコマンド
で使えます。
例
path="tmp1"
!mkdir /content/$path
/content/tmp1
が作られます。
システムコマンドの実行結果をコードセルの変数に格納する。
例
res=!echo hello
print(res)
res=!python -c 'print("world")'
print(res[0])
['hello']
world
フォーム、Markdownを使う。
コードセル
とテキストセル
で使います。
インタラクティブなフォーム(公式の例↓のみで十分)
https://colab.research.google.com/notebooks/forms.ipynb
Markdown記法であれば大抵対応
https://colab.research.google.com/notebooks/markdown_guide.ipynb
よく使うコマンド
ファイルを作成・保存する。
%%writefile ファイルのパス
をコードセル
の1行目に書きます。
1行目以外のすべての行が、改行を維持したままファイルのパス
へ保存されます。
例
%%writefile xxx.py
import time
time.sleep(1)
print("hello")
!python xxx.py
シェルコマンドecho
を使います。
例
r=10
s=f"""
hoge={r}
fuga=20
""".strip()
!echo -n "$s" > xxx.txt
hoge=10
fuga=20
他にも直接ファイルをアップロードしたりすることができます。
bashモードで書く。
%%bash
を1行目に書くことで、pythonモード
からbashモード
になります。
例
%%bash
sleep 3
echo hello world
hello world
その他シェルコマンドを使う。
cd
、pip
、nohup
など、多くのコマンドに対応しています。
例
%%writefile requirements.txt
streamlit
fastapi
!pip install -r requirements.txt
よくやる操作
セルの実行
選択中のコードセル
でShift
+ Enter
コードセル
の ▶
をクリック
メニューバー
から、
ランタイム
> すべてのセルを実行
or ランタイム
> 現在のセルを実行
セルの実行停止
コードセル
の ■
をクリック
一回で停止しない場合は、何回かクリックします。
停止するまでに遅延があるので、クリック連打による再実行に注意
メニューバー
から、
ランタイム
> 実行を中断
ランタイムを出荷時設定にリセットする。
何か上手くいかなかったときは再起動。
メニューバー
> ランタイム
> ランタイムを出荷時設定にリセット
すべてのローカル変数やファイルを含め、ランタイムの状態は保存されません。
ただし、追加したセルは保存されます。
起動中のセッションを終了する。
⑦セッションの状態
> セッションの管理
> 終了
Googleドライブをマウントする。
左ペイン
> ファイルアイコン
をクリック > ドライブアイコン
をクリック
from google.colab import drive
drive.mount("/content/gdrive")
ファイルブラウザ or エディタを起動する。
ディレクトリ構造やファイルの中身を視認します。
画像ファイルを表示することもできます。
from google.colab import files
files.view("/content")
files.view("/content/xxx.txt")
#クォーテーションで囲まれたファイルやディレクトリの絶対パスの上に
#マウスのポインターを置き、出現したポップアップをクリック
print("/content")
左ペイン
> ファイルアイコン
をクリック > ファイル
をダブルクリック
テキストエディタでは Ctrl+D などのショートカットキーが使えます。
ファイルのアップロードフォームを表示する。
from google.colab import files
uploaded = files.upload()
ローカルホストを出力する。
サーバーが立ち上がったかどうか確認するため、ローカルホストのURLを出力します。
from google.colab.output import eval_js
port=8010
eval_js(f"google.colab.kernel.proxyPort({port})").strip("/")
'https://--8010-colab.googleusercontent.com'
画像関連
コードセルの出力画面に画像を表示する。
IPython
を使います。(標準でインストール済みです。)
!pip show IPython
ローカルに保存した画像パスから画像を読み込む。
from IPython.display import Image,display_jpeg,display_png
display_jpeg(Image("sample.jpg"))
ローカルに保存せずに画像URLから表示する。
from IPython.display import Image,display_jpeg,display_png
img_url="https://dummyimage.com/100x50/6e6e6e/ffffff.jpg"
Image(url=img_url)
Image(url=img_url)
は最後に実行する必要があります(空行やコメントアウト行を除く)。
画像URLから取得したバイナリデータをio.BytesIOに渡す。
from io import BytesIO
import requests
img_url="https://dummyimage.com/100x50/6e6e6e/ffffff.jpg"
img = BytesIO(requests.get(img_url,timeout=15).content)
# 表示する場合
#import IPython
#IPython.display.Image(img.getvalue())
IPython.display.Image(img)
は最後に実行する必要があります(空行やコメントアウト行を除く)。
画像URLから画像を保存する。
from io import BytesIO
import requests
import IPython
img_url="https://dummyimage.com/100x50/6e6e6e/ffffff.jpg"
img = BytesIO(requests.get(img_url,timeout=15).content)
output="/content/sample.jpg"
with open(output, "wb") as f:
f.write(img.getvalue())
Pillowを使う。
from io import BytesIO
import requests
import IPython
import PIL
img_url="https://dummyimage.com/100x50/6e6e6e/ffffff.jpg"
img = BytesIO(requests.get(img_url,timeout=15).content)
output="/content/sample7.jpg"
img = PIL.Image.open(img)
img.save(output)
フレームワークとの連携
Streamlitを起動する。
#portはデフォルトで8051
!streamlit run app.py
#!streamlit run app.py --server.port=8030
ColabratoryではそのままではStreamlitの全機能を使うことができないので
ngrokかlocaltunnelでトンネルして起動します。
ngrokは最近よく失敗するのでlocaltunnelおすすめです。
ngrok、localtunnel共にローカルで実行中のアプリを外部公開するサービスなので、
公開URLを知っている人なら誰でもアクセスできてしまいます。
ngrokで
import nest_asyncio
from pyngrok import ngrok
ngrok_tunnel = ngrok.connect(8051)
host=ngrok_tunnel.public_url
nest_asyncio.apply()
print("Public URL:", host)
!streamlit run app.py
Public URL: http://********.ngrok.io
をクリックして移動。
Click to Continue
ボタンを押す。
localtunnelで
!streamlit run app.py & sleep 10 && npx localtunnel --port 8501
your url is: https://*****-*******-**.loca.lt
をクリックして移動。
Click to Continue
ボタンを押す。
FastAPIを起動する。
from google.colab.output import eval_js
port=8030
eval_js(f"google.colab.kernel.proxyPort({port})").strip("/")
import uvicorn
!uvicorn.run(app=app, port=int(port),host="0.0.0.0")
https://***********-****************-8030-colab.googleusercontent.com
に接続。
ngrokで
Streamlitを起動する。
を参照。
localtunnelで
Streamlitを起動する。
を参照。
localhostとして他のアプリケーションと連携したい場合のエンドポイントは、
http://localhost:[port番号]/です。
例:
Streamlitをlocaltunnelで + FastAPIをlocalhostで
ノートブック
準備中
予定のcolabノートブック
FastAPI(最小構成)
Streamlit+FastAPI(最小構成)
Streamlitページ遷移
Streamlitポップアップ
Streamlitページ遷移+ポップアップ
FastAPI+SqlAlchemy
ToDoアプリなどwebアプリ群
簡易サーバー起動 nohupも
-
ブラウザやバージョンにより挙動が異なることもあるようです。 ↩