Google Colaboratoryの仕組みって?

f:id:ts0818:20210222190641j:plain

monoist.atmarkit.co.jp

エイシングは2020年12月15日、新たなエッジAI(人工知能アルゴリズム「MST(Memory Saving Tree)」を開発したと発表した。エイシングがこれまでに発表した「DBT(Deep Binary Tree)」や「SARF(Self Adaptive Random Forest)」などのエッジAIアルゴリズムと比べて使用するメモリを大幅に削減できるため、フラッシュメモリSRAMの容量がKBレベルの小型マイコンにも実装でき、エッジAIの処理速度や精度も従来アルゴリズムと同等とする。MSTは2021年1月から提供を開始する予定だ。

リアルタイムに学習できるエッジAIが進化、メモリがKBレベルのマイコンにも対応:人工知能ニュース - MONOist

 同社は、AI技術として広く知られているディープラーニング(深層学習)とは異なる、木(Tree)構造のAIアルゴリズム「AiiR(AI in Real-time)シリーズ」を展開している。AIの学習に高性能のCPUやGPUアクセラレーターなどを用いた大規模な計算環境が必要となるディープラーニングに対して、AiiRシリーズはArmの「Cortex-Aシリーズ」などを搭載するプロセッサでリアルタイムにエッジ側で学習を行えることが特徴だ。2019年1月に発表したDBTは、「Raspberry Pi Zero」に実装して、学習は50μ~200μs、推論は1μ~5μsで応答可能としていた。

リアルタイムに学習できるエッジAIが進化、メモリがKBレベルのマイコンにも対応:人工知能ニュース - MONOist

⇧「エッジAI(人工知能アルゴリズム」なるものが存在することを最近知りました、どうもボクです。

ちょっと旧い情報になりますが、

ledge.ai

岩手大学発のAIスタートアップ エイシングが、独自の機械学習アルゴリズムディープバイナリーツリー(DBT)」を用いたエッジAIチップを発表しました。

ディープラーニングではなくDBT。岩手大学発スタートアップ エイシングがエッジAIチップを発表 | Ledge.ai

⇧「DBT(Deep Binary Tree)」は「機械学習アルゴリズム」の1種と言われてるようなので、「機械学習」の分野の話ってことですかね。 

ledge.ai

⇧「深層学習(DL:Deep Learning)」との違いは、上記の様になっているようです。

というわけで、ローカル環境で環境構築せずともPythonによる機械学習のコーディングや実行とかができるという「Google Colaboratory」について調べてみました。

レッツトライ~。

 

Google Colaboratoryって何?

公式のドキュメントによりますと、 

colab.research.google.com

Colaboratory(略称: Colab)は、ブラウザから Python を記述、実行できるサービスです。次の特長を備えています。

  • 環境構築が不要
  • GPU への無料アクセス
  • 簡単に共有

https://colab.research.google.com/notebooks/intro.ipynb?hl=ja#scrollTo=GJBs_flRovLc

⇧ ローカル環境で、PythonのコードをGPUで実行しようと思うと、環境構築に時間がかかると思われますが、「Google Colabolatory」を使えば、煩わしい環境構築が不要ですと。

どういう仕組みなのか?

Google Colaboratory」の「FAQ(Frequently Asked Questions)」のページを見ると、

research.google.com

Colab の使用量上限とは何ですか?

Colab では、状況によって変動する動的な使用制限を設け、無制限のリソース提供やリソースの保証を行わないことによって、無料でのリソース提供を実現しています。つまり、全体の使用量の上限、VM の最大存続時間、利用できる GPU タイプなどの要素は、今後変更される可能性があります。Colab では、変更が頻繁に起きる可能性があることから、これらの上限を公開していません。

https://research.google.com/colaboratory/faq.html?hl=ja

⇧ 何か、「VM仮想マシン)」をGoogleが用意してくれてるみたいね。

www.atmarkit.co.jp

 Colabは非常に簡単に使えるのが特徴だ。Colabノートブックにアクセスすると、バックエンドでグーグルが管理する大量のVM仮想マシン)の一つに自動的に接続される(図4のPre-warmed VMs)。無料にも関わらず、(通常は「CPUを使うVM」だが)必要に応じてGPUやTPUが使えるVMも利用できる。また、Python環境だけでなく、GPUディープラーニングするためのCUDAやTensorFlowを含めて人気ライブラリ数百種類がインストール済みなので(Pre-installed packaged)、すぐに機械学習ディープラーニングの作業を開始できる。

Colab Pro登場と、Google ColabユーザーのためのTipsトップ10:気になるニュース&ネット記事 - @IT

⇧「Pre-warmed VMs」っていう、Googleが管理してる「VM仮想マシン)」群の中から自動的に接続されるみたいね。

ちなみに、2021年2月22日(月)時点では、「Google Colaboratory」のVM仮想マシン)の情報を確認してみたところ、

Ubuntu 18.04.5 LTS \n \l

f:id:ts0818:20210222140344j:plain

⇧ という感じで、「Ubuntu 18.04.5 LTS」が利用されておりました。

2021年3月19日(金)追記:↓ ここから

内部的に「Ubuntu」を使ってる?ようですが、何か「Chromium OS」を使ってるということにもなるのかな?

cat /proc/version    

実行結果

Linux version 4.19.112+ (builder@a12462ca91c8) (Chromium OS 10.0_pre377782_p20200113-r10 clang version 10.0.0 (/var/cache/chromeos-cache/distfiles/host/egit-src/llvm-project 4e8231b5cf0f5f62c7a51a857e29f5be5cb55734)) #1 SMP Thu Jul 23 08:00:38 PDT 2020

 

ls -l /etc/*release    

実行結果

-rw-r--r-- 1 root root 105 Aug 13  2020 /etc/lsb-release
lrwxrwxrwx 1 root root  21 Aug 13  2020 /etc/os-release -> ../usr/lib/os-release

 

cat /etc/lsb-release   

実行結果

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.5 LTS"

Chromium OSクロミウム・オーエス)は、主にウェブアプリケーションと共に動作するようGoogleにより設計されたLinuxディストリビューションであり、Chrome OSオープンソース開発バージョンである。

Chromium OS - Wikipedia

このオペレーティングシステムアーキテクチャは3層で、ファームウェア、システムレベルソフトウェア、そしてウィンドウマネージャから構成される。

Chromium OS - Wikipedia

Chromium OSのインストール可能で動作するバージョンは、主に有志や企業により作成されダウンロード可能な状態となっている。デバイスの中には主なオペレーティングシステムとしてChromium OSをプリインストールしたものもある。

Chromium OS - Wikipedia

Googleは2009年の後半に初めてChromium OSソースコードを公開した。

Chromium OS - Wikipedia

Wikipediaの情報を見ても、特に内部的に「Ubuntu」を使ってるみたいな記載は無いのでよく分からん...

ソースコードを見ろってことなのかね?

www.chromium.org

Prerequisites

You should have

  • a 64-bit system for performing the build

https://www.chromium.org/chromium-os/quick-start-guide

⇧ どうやら、「Chromium OS」を「ソースコード」からビルドするのに、「Ubuntu」の環境が必要ということだったみたいですね。

なので、「Google Colaboratory」の仮想マシンも「Ubuntu」があっての「Chromium OS」ってことになるってことですかね。

で、「Chrome OS」と「Chromium OS」の違いはというと、

What's the difference between Chromium OS and Google Chrome OS?

Google Chrome OS is to Chromium OS what Google Chrome browser is to Chromium.

  • Chromium OS is the open source project, used primarily by developers, with code that is available for anyone to checkout, modify, and build.
  • Google Chrome OS is the Google product that OEMs ship on Chromebooks for general consumer use.

https://www.chromium.org/chromium-os/quick-start-guide

⇧ なるほど、「Chrome OS」は製品であり、「Chromium OS」は「OSSOpen Source Software)」ってことになるみたいですね。

Chromium OS」のアーキテクチャについては、

www.chromium.org

⇧ 上記のページにまとまってるようです。

う~ん、「Ubuntu」は「ソースコード」からビルドする場合だけに必要ってことなのか、「Ubuntu」が無くても動くんかね?

よう分からんな...

2021年3月19日(金)追記:↑ ここまで

Google Colaboratory」の利用時の全体概要イメージ図については、

medium.com

⇧ 上記サイト様のイメージ図が分かりやすいです。

Google Drive」に「拡張子」が「.ipynb」のファイルをアップすることで、「Google Drive」上でPythonのプログラムを実行できるようになるようです。

「拡張子」が「.ipynb」のファイルは、

ipython.org

The IPython Notebook is now known as the Jupyter Notebook. It is an interactive computational environment, in which you can combine code execution, rich text, mathematics, plots and rich media. For more details on the Jupyter Notebook, please see the Jupyter website.

https://ipython.org/notebook.html

⇧ おそらく「Jupyter Notebook」が「IPython Notebook」と呼ばれてた時代の名残りということですかね?

ファイルの拡張子「.ipynb」については、「IPython Notebook」の頭文字を取ってるんじゃないのかな~って気がしますが、推測です。

「Jupyter Nootbook」の後継と注目されてる「Jupyter Lab」とかも同じく「.ipynb」って拡張子で保存されるっぽいんだけど、

jupyter.readthedocs.io

This section focuses on IPython and kernels. When we discuss IPython, we talk about two fundamental roles:

  • Terminal IPython as the familiar REPL

  • The IPython kernel that provides computation and communication with the frontend interfaces, like the notebook

https://jupyter.readthedocs.io/en/latest/projects/architecture/content-architecture.html#ipython-kernel

⇧ おそらく「IPython Kernel」ってのが、「notebook」のようなフロント側のインターフェースを提供してるってあるので、「IPython Kernel」を使ってるんであれば、「.ipynb」って拡張子のファイルに対応してるんじゃないかと推測されます、多分。

脱線しましたが、つまり、「Googleアカウント」さえあれば、 「Google Colabolatory」は使えるようです。(「.ipynb」形式のファイルは、 「Google Colabolatory」上で作成できるので。)

ただし、

qiita.com

⇧ 上記サイト様にありますように、「Googleドライブ」に配置してる「画像」や「CSVファイル」なんかを読み込みたい場合は、「Googleドライブ」から読み込むのコーディングが必要みたいです。

 

インストールしたパッケージとかはどこにある?

Python に限らず、コーディングしていて標準機能だけじゃなくて外部ライブラリをインストールしたいな、って時があるとインストールすると思うのですが、「Google Colabolatory」を使ってる場合、インストールしたライブラリとかってどうなってるのか?

www.kabuku.co.jp

 Google Colaboratory(以降、Colaboratory)というサービスをご存知でしょうか。このサービスはGoogle Driveなどを通じてJupyter Notebooksのような環境を管理することができるサービスになります。iPython Notebook(以降ipynb)上のセルを実行するとデフォルトでGoogleが提供してくれているサーバー上で動くことになりますが、今回は手元のPCやリモートサーバ上でColaboratoryを実行していきたいとおもいます。

Google Colaboratory を自分のマシンで走らせる | Kabuku Developers Blog

⇧ 上記サイト様によりますと、デフォルトだと「Google Colabolatory」は「Google」が管理してるサーバー上で動くようなので、インストールしたライブラリなんかも「Google」が管理してるサーバー上に配置される感じのようです。

つまり、デフォルトの状態だと、 インストールしたライブラリなども時間が経つと、消されてしまうと思われます。

というのも、おそらく、

qiita.com

⇧「90分と12時間っていう2種類の時間制限ルール」があることから、「Google Colaboratory」 の仕組みってのは「サーバレス」のような感じで、使ってない場合は「Google」が管理してるサーバー内で起動されてるだろう「仮想マシン」自体を削除してるんではないかと。(公式のドキュメントでアーキテクト図とか公開されてないみたいなので、あくまで推測です)

 

CSVファイルなんかはどこに出力される?

CSVファイルに限らず、プログラミングしてると、ファイル出力とかすること多いと思います。

このあたりの出力ファイルなんかについても、インストールしたライブラリなんかと同様で、デフォルトの状態だとGoogleが管理してるサーバー上に配置されると思うので、自分のローカル環境なんかにダウンロードする必要があるらしく、

⇧ 上記サイト様によりますと、「CUI」「GUI」のどちらのダウンロード方法にも対応してるっぽい。

当然のことながら、

prob.space

筆者は以下のようにしてローカル環境にダウンロードした。

#submitはラベルと予測結果をまとめたpd.DataFrame
submit.to_csv('submission.csv',index=False)

from google.colab import files
files.download('submission.csv')

Google ColaboratoryのGPUを使っている参加者の方は、このコードを実行してcsvファイルがダウンロードされていることを確認してほしい。

Google Colabで作成したcsvファイルのダウンロードの仕方 | ProbSpace

⇧ 上記サイト様のように、ダウンロードする前に、事前にファイルを出力している必要はあります。(上記サイト様の例ですと、「to_csv()」メソッドを使用して「submission.csv」ファイルを事前に出力している感じですね。)

まぁ、何が言いたいかというと、デフォルトの状態で「Google Colaboratory」上でPythonのコーディングなんかをコーディングしていてファイル出力したとしても、出力先が「Google」のサーバー上に配置されるようになってる場合は、出力したファイルはローカル環境にはダウンロードされないので、気をつけましょう。

Google Colaboratory」の詳細なアーキテクト図なんかを公開してくれてれば、モヤモヤ感が多少は改善されるとは思うんですがね...

 

今回はこのへんで。