HuggingfaceとColabで始める簡単機械学習

## ・はじめに
今年の機械学習分野は、オープンソースのAIを使った自然言語処理技術が特に印象的でした。画像生成分野ではStabilityAI社の「StableDiffusion」を始めと様々な画像生成AIが公開されましたし、音声認識分野ではOpenAI社の「Whisper」が発表されました。次々と高品質なオープンソースのAIが発表され、さらなる改良モデルの公開やそれらの技術を使ったサービスの公開など盛り上がりを見せています。その中で、最近のAI・機械学習意外と凄いかも！やってみたい！と思った方も多いのではないでしょうか？今回はそんな方向けにWebサービスを使ってオープンソースAIを使って簡単にできる機械学習の記事を書いてみることにしました。


## ・使うサービス
使うサービスは以下の２つになります。

#### 1. Huggingface
https://huggingface.co/

#### 2. GoogleColaboratory
https://colab.research.google.com/

ご存知の方も多いとは思いますが、まずは上記のサービス２つについて説明したいと思います。


## ・HuggingFaceとは？
米国のHuggingFace社が提供している自然言語処理に特化したディープラーニングのプラットフォームです。BERTなどの最先端のアルゴリズムに対応したアーキテクチャに加え、多言語且つ多様なオープンAI、すなわち事前学習モデルに対応、最先端のアルゴリズムを簡単に試すことができます。もともとは、TransformerやDatasetsなどの基礎技術を集約したエコシステムで、今はモデルの検索やタグ付け、コミュニティ管理も含め、「とりあえず最新のAIモデルはここを追っていれば大丈夫」くらいの事前学習モデルの一大集積地となっています。


## ・GoogleColabとは？
Googleが提供する機械学習専用VMプラットフォームです。jupyter-notebookのようなWebブラウザ上で主にpythonを使って処理を記述・実行できる統合開発環境です。特徴は常時借りたら月数万円かかるようなハイパフォーマンスなPCを使って機械学習の各種タスクを行う事ができます。連続動作は24時間までで、動作が不安定な時もありますが、誰でも無料で使えます！有料版として1000円程度を支払うことでより安定した連続動作が約束されます。スペックも少し上がったりします。


## ・この２つで何が出来る？
自然言語に関わるタスクなら何でもできると言っても過言ではないでしょう。文章分類、文章生成、情報抽出、具体例としては「ChatGPT」のような質問応答、「DeepL」のような文章翻訳、文章要約などの基本的な言語タスクの他、「NovelAI」や「midjourney」や「DALLE」のような文字からの画像生成、「VOICELOID」のように文字からの声を生成することや、「Github Copilot」のように説明を書いたら自動でプログラムコードを生成することなどなど....今世に出ているサービスの真似事やその基礎技術を使ったり、学んだり、改善を考えたりも出来ます。

## ・使い方
### 1. huggingfaceへのユーザーの登録
⇒事前学習モデルをDLして使用する際にモデルの許可・AuthTokenが必要な場合があります。
Tokenは右上ユーザーからSetting>AccessTokenでNew tokenで作成出来ます。
![setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237024/977365c5-c470-e901-9118-04aaa7209897.png)

### 2. 機械学習のモデルの検索
左上に英語で関連のキーワードを入れて、モデルの項目の最後尾にあるSee　・・・modelsをクリックするとモデルの一覧が出ます。関連キーワードの具体例としては感情分析だったらsentiment analysis、文章生成ならtext generation、画像生成ならdiffusionなど...。学習の元になるデータセットも大体はここで探せます。
![search.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237024/3362954a-f05c-e165-bb15-2e751b2e7e96.png)

検索結果のページでは左側のメニューから絞り込みが出来ます。
日本語系の事前学習モデルが欲しければJapaneseで絞り込むと良いかもしれません。
![search result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237024/537bcc49-c8b4-1856-a03e-d07e20054323.png)


### 3. 機械学習のモデルの使用許諾
使用に予め許可が必要ならModelCardで説明文見てボタンでAgree
以下japanese-stable-diffusionの場合
![model card.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237024/30a869d6-03cd-4d54-4049-d4944b18b6d2.png)

### 4. サンプルコードの実行
許可を得るとModelCardに載っているサンプルコードが見れます。
それらをGoogleColabに貼り付けして手順通りに実行します。

### 5. パッケージインストール
サンプルコードに必要なパッケージ等は上記のModelCardに大体書いてありますが、
なければColab上で以下のような感じでインストール

```python
pip install diffusers==0.3.0 transformers scipy ftfy
```
### 6. 推論実行！
下記にサンプルとしてStableDiffusionで画像を生成するColabのノートブックを用意してあります。
各自ののGoogleDriveにコピーして使ってみてください。
https://colab.research.google.com/drive/1wuxbZ1Ae0sFusyZr9WwN07tdrBM2jdxv?usp=sharing

## ・注意点
GoogleColabは無料版だとTeslaT4(GPU RAM16GB)までしか使えない。有料版のGoogleColabProでも当たり(TeslaP100のRAM24GB)を引かないとだいたいがTeslaT4がGPUとして割当される。そのため、事前学習モデル8GB以上はロード出来ずに使えない場合がある。そもそも事前学習モデルから更に追加で学習させる場合、TeslaT4では足りない場合が多い。また、最初のところで書いたようにGoogleColabは24時間でセッションが切れるので学習など長時間使うのには向いてない。


## ・アドバンスド
追加で学習したい。より大きな事前学習モデルを使いたい。高速で推論させたい。そういう時は高性能なGPUを積んだVMを借りる必要がある。だがGCP/AWSは大体が高すぎるので、以下でVM借りると結構安く済む。

　１．vast.ai(https://vast.ai/console/create/)
 
プラットフォームを通して個人間でハイパフォーマンスGPUを搭載しているVMの貸し借りができるサイト。Spotで借りれて圧倒的に安いがセキュリティ面は少し心配ではある。あと、遠い国のVMはアップロード遅いのでなかなかに不便。借りてる時間無駄になることも...

　２．lambda labs(https://lambdalabs.com/)

信頼性が高い企業運営のVM系のプラットフォームとしてはGCPより安く、最安値。アップロード速度や回線などGCPよりも早い。現状最速のGPU A100 RAM40GB搭載のVMがなんと１時間1ドルで借りれる。

## ・終わりに
HuggingfaceとColabを使うだけで簡単に最先端の機械学習モデルの恩恵に預かることができる。今後、huggingfaceなどのこういったオープンソースのAIから様々なモデルが生成され、人工知能が世に染み渡り、世間をどんどん変えていく可能性がある。せっかく無料でしかも簡単に使えるのだし、これを今の時代使っておいてまったく損はないと思う。是非知らなかった方は使い倒してほしい。事前学習モデルで飽き足らなくなった人は、是非データセットを使って自前の事前学習モデルを作ったり、研究をしてみたりしてほしい。きっと未来はすぐそこにあるのかもしれない。