lightning.aiでOllamaを使用して話題のCommand R+を動かしてみた

## はじめに
この記事では、AI開発プラットフォームであるLightning AIを活用して、Ollamaを介して大規模言語モデルCommand R+を操作するプロセスを詳しく解説します。特に、なぜLightning AIを選び、Ollamaを通じてCommand R+を操作するのか、その意義と利点を掘り下げていきます。読者はこの記事を通じて、最新のAI技術を用いたモデルの操作方法だけでなく、その適用が実際の開発フローにどのように役立つかを理解できるようになるでしょう。

## lightning.aIとは
lightning.aIは、機械学習モデルのトレーニングからデプロイメントまでを一貫して支援するクラウドベースのプラットフォームです。このプラットフォームは、GPUを駆使した高速な計算能力を提供し、開発者が直面する多くの課題を解消するための高度なツールセットを備えています。

特に、Webブラウザ経由からでも、VSCodeやターミナルを通じての操作性に優れており、開発者はこれらの馴染みのある環境を利用して直感的に作業を進めることができます。これにより、コードの編集やデバッグ、AIモデルの管理まで、一貫したユーザーエクスペリエンスを提供します。これらのツールは、プロジェクトのセットアップから実行、監視に至るまでの全過程で直感的な操作が可能であり、開発の効率を大幅に向上させます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/390a0a55-64d7-233b-d17a-47ac792d4703.png)

公式サイトでさらに詳しい情報を確認することができます：[lightning.aI 公式サイト](https://lightning.ai/)

メール、Googleなどでアカウントの登録ができます。登録してから数日の営業日で環境を使えるようになりました。無料枠でも以下のような機能を試すことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/d3b36f87-46c7-2e47-ea31-c2c38e691c66.png)

# Command R , Command R+とは
Command R , Command R+は、Cohereの大規模言語モデルです。数十億のパラメータを持つこのモデルは、自然言語処理やテキスト生成において優れた能力を発揮します。Commandモデルの強化版として、より複雑なタスクを処理し、精巧で正確な応答を生成します。長文要約、会話、創作など多様なタスクをこなし、その柔軟性とパフォーマンスの高さで、言語処理の分野で新たな地平を開いています。

https://cohere.com/

## Command Rのセルフホスティングのテンプレートの利用

lightning.aIのテンプレートとしてCommand Rが用意されているので、そこから試してみました。その後に、Command R+を試していきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/20ecc120-6e27-b78a-a146-d74d489877df.png)

Studio Templatesのページで、モデル名で検索します。

https://lightning.ai/lightning-ai/studios/self-hosted-rag-app-using-cohere-s-r

このページのOpen in Studioのボタンをクリックすると、このテンプレートが開きます。
- GPUはL4が割り当てられている
- デフォルトでollamaはインストールされている
- サンプルのRAGのプログラム(app.py)が含まれている
- Streamlitで動作をすぐに確認できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/beb3344e-1b7e-9ba2-b78a-b7234e35ec0f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/29bfd5b6-bf0c-cd32-3d0a-4f81db1c0939.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/f13cc3e1-f6da-e2a6-77e8-9651f98a5212.png)

「+」でStreamlitを追加する

Stramlitのアイコンが追加されたらクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/7ee49bef-0613-331f-c87b-164f8d47618a.png)

「+　New App」をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/ab6ac8dd-8a34-75af-2991-98c805d07f59.png)

Webアプリとして動作させたいapp.pyを左側で選択する。
Runをクリックしてアプリを実行する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/c453ae56-d942-e311-ac30-fa4fc705f9cc.png)

このようにWebアプリが起動する。起動したリンクはpublicで共有することも可能。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/fcb377a7-d636-87db-79e1-9e65b44295e2.png)

Browse filesでRAGしたいpdfファイルを指定する
[引用元](https://www.chuo-tky.ed.jp/~hisamatu-es/_resources/content/6126/20200430-152542.pdf)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/6e15ff95-6db7-0aeb-d6de-90c664dee031.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/58eeea81-a168-4c9d-09cf-ad38c7690477.png)

こんな感じで、対象の文章からノウハウを抽出できた。

## Command R+にモデルを変更する

このパフォーマンスだったら、Command R+も動作するのではと思い、試してみる。
ソースコードを編集する画面にもどり、app.pyの90行目のOllamaでモデルを指定しているところを変更する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/5f5a5f28-68ba-966a-0e1e-d516b3a07ccf.png)

モデル名をcommand-r-plusに変更する。

ターミナルで「ollama push command-r-plus」を実行して、モデルをダウンロードする。
ダウンロードのスピードは、Google Colaboよりはやく感じた。利用者数の状況にもよるだろうが・・・。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/939c904d-2d0f-9343-5f4c-d704419e3679.png)

同様にWebアプリで動作確認したところ、GPUがL4でも、時間はかかるがチャットボットから返事がかえってきた。

## GPUの選定とパフォーマンス
無料枠でもA10G GPUに変更可能でした。パフォーマンスが大幅に向上しました。コストで消費するクレジットの数から、これを選択してみた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/fe0b4fe1-fbdf-830f-fb90-bfd84e910000.png)

GPUの選択アイコンをクリックしてA10Gを選択してConfirmする。プロジェクトはそのままで、スケールアップすることができる。すばらしい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/7d1f027c-63e8-8089-7bc8-677c6ce088f3.png)

CPUでの選択肢は、上図のようになっていた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/22bcf863-5499-d23d-224e-d0844b49c6af.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/d4018278-8254-e98c-a2a3-e9e2293650ea.png)

GPUの使用率が爆あがりになるが数十秒で回答が返ってるスピード感であった。V100や有料版で複数GPUなどすると、もっとパフォーマンス良くに動くのだろうか・・・。

## まとめ
Lightning AIを活用して、無料枠でもOllamaを用いたCommand R, Command R+を試す環境をスムーズに構築することができました。

### 環境の安定性とユーザビリティ
Google Colabとは異なり、Lightning AIでは作業環境がリセットされることなく継続的に使用できるため、長時間のトレーニングや実験が可能です。また、VSCodeやターミナルを使用した操作が可能で、開発者にとって非常に使いやすい環境が整っています。

### 開発とデプロイの環境
Lightning AIでは、PythonベースのWebアプリケーションを容易に公開して動作確認を行うことができます。これにより、実際のアプリケーションとしての動作テストが手軽に実行ができました。

### 環境設定の柔軟性
プロジェクトの要求に応じてGPUの種類や数を動的に調整可能です。スケールアップのプロセスと、最適なリソース配置の手順を確認しました。

## 感想

- この記事の投稿を通じて、将来のAI技術の進展に伴い、コンピューティングリソースを効果的に確保し管理することの重要性を改めて感じました。適切なリソースがあれば、AIのポテンシャルを最大限に引き出すことができます。
- AIやハードウェア技術の進化が続く中で、単に技術を使用するだけでなく、AIを活用した業務設計や要件定義の精度を高めることが、成功に向けてより重要になっていると実感しました。テクノロジーが進歩しても、その背後にある戦略的な思考が不可欠です。
- 学生時代、物理シミュレーションの計算を行うために、緊張しながら研究室の高価な計算機にSSHを使ってリモートログインし、計算を開始していたことを思い出しました。その時も、限られた計算リソースを確保するのに苦労していました。

## 参考

<iframe width="560" height="315" src="https://www.youtube.com/embed/78aQx7QcryU?si=8bssYqirutr3oWNu" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

lightning.aiさん、GPUをつかわせてくれてありがとう。Command R+をセルフホストで動かすことができた！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/ada81980-2b3a-0f94-be81-af668f97b480.png)

無料枠では現時点 (2024年5月時点) では初期で15クレジットまで使用できる。使い切ったら、クレジットを別途上記のように追加購入もできるようだ。