LLaMA 3.2を使ったパーソナルアシスタントの作成
AIの最も即座に利用可能なアプリケーションの一つはチャットボットであるべきです。チャットボットは30年間何らかの形で存在していましたが、最後の2年間でこれらの個人アシスタントのチャットインターフェースが真の台頭を見せてきました。彼らは高度な技術サークルからすべての生活様式、社会的状況、ビジネスの利用ケースに広がっています。
利用可能で使いやすい一方で、優れたチャットボットの多くはクローズドソース技術の壁に囲まれています。これらの環境には、インターネット検索の接続性、エージェントと対話するためのカスタムプロファイル、利用可能な最良の大規模言語モデル(LLM)へのアクセスなど、独自の利点があります。しかし、オープンソースコミュニティは常にこれらの発展に合わせて進んできたため、オープンソースツールにも独自の利点、つまりカスタマイズ、ファインチューニング、他の技術との複雑な統合が備わっています。
この記事では、最新かつ素晴らしいオープンソースモデルスイートの1つであるLLaMA 3.2について見ていきます。これらの11bパラメータを持つ視覚対応モデルは、さまざまな視覚指示チューニングベンチマークでGPT-4o miniやClaude 3 - Haikuに匹敵するパフォーマンスを誇り、コストは大幅に低く抑えられています。さらに、軽量な2bパラメータモデルは、PHI miniやGemma 2bのような最先端のエッジモデルと同等のパフォーマンスを提供します。このチュートリアルでは、これらのモデルが特別な理由を分解して説明します。その後、この強力なオープンソースモデルを使って、個人アシスタントチャットボットを作成する方法を示します。この個人アシスタントは、文章作成、コーディング、翻訳など、あらゆることを手伝うことができ、テキストと同様に画像データで簡単に作業できるように完全に設定されています。
私たちと一緒に進んで、HuggingFace Projectsのスタッフであるmerveのオリジナルプロジェクトを元にした強力なアシスタントアプリケーションを運営するためのガイドを使用して、DigitalOceanのGPU ドロップレットでこれらの素晴らしいモデルを使用する利点についてより深く掘り下げていきましょう。
前提条件
この記事を進めるためには、Pythonコードの経験と深層学習の初心者レベルの理解が必要です。すべての読者が提供されたコードを実行できるだけの十分な性能を持ったマシンにアクセスできるという前提で進めます。
GPUにアクセスできない場合は、クラウドを通じてアクセスすることをお勧めします。GPUを提供するクラウドプロバイダーは多数あります。DigitalOcean GPUドロップレットは現在、早期利用可能な状態です。詳しくは、こちらでGPUドロップレットへの関心登録を行ってください。
Pythonコードの始め方についての指示には、システムを設定し初心者向けのチュートリアルを実行する準備をするための初心者向けガイドを試すことをお勧めします。
LLaMa 3.2モデルスイート
LLaMA 3.2モデルスイートは、主に4つのモデルで構成されています:小型の11Bビジョン・ランゲージモデル、大型の90Bビジョン・ランゲージモデル、そして2つの軽量テキスト専用モデル(1Bと3B)です。前者のモデルはテキストと画像データの両方を視覚化し理解することが可能ですが、後者はテキストに特化しています。これらはそれぞれ自分のクラスにおいて最先端またはそれに近いパフォーマンスを提供します。
ソース
制作者は、彼らのモデルが著名な基盤モデルであるGPT-4o MiniやClaude 3 - Haikuと同等のパフォーマンスを提供すると主張しています。上のグラフィックからわかるように、これらの主張は、数学や問題解決のタスクを含むさまざまなビジョンと言語のタスクにわたるベンチマークによって裏付けられています。特に興味深いのは、11Bモデルが比較的強力であるように見えることで、これが弱いGPUやエッジデバイスでこれらの高性能LLMを実行する潜在能力を示しています。これは、これらのモデルがトップレベルのクローズドソースモデルと並んで使用される際に競争力のあるパフォーマンスを発揮することが期待できることを意味します。
ソース
次のグラフィックでは、軽量でテキストのみのモデルが、主要競合のPHI Mini ITおよびGemma 2bと比較されていることがわかります。すべてのベンチマークで、軽量モデルはこれらの基盤モデルと同等以上のパフォーマンスを発揮しました。これは、LLaMA 3.2モデルが弱いプロセッサーで最高レベルで動作できることを示しており、さらにはテキスト生成を行う携帯デバイスの可能性もあります。
私たちが見るように、モデルスイートの両カテゴリーは同じレベルのSOTA基盤モデルと非常に競争力があり、クローズドソースの代替品を上回ることもできます。
LLaMA 3.2の強みと弱み
LLaMA 3.2の強みと弱みを考えると、最初に理解すべき重要な点は、他の多くのクローズドソースツールと同じ機能が付属していないということです。しかし、クローズドソースモデルではできない方法でカスタマイズすることができます。ユーザープロファイルに保存された情報やカスタム設定、インターネット接続や検索、RAGや他の機能のためのローカルコードのアドオンなどは、私たちが自分たちで行わない限り、LLaMA 3.2に統合されることはありません。
そうは言っても、LLaMA 3.2自体の主な強みを、他の既存のモデルと比較して見ていきましょう:
強み
- ファインチューニングとLoRA:既存のモデルをカスタマイズする能力は、常にクローズドソースモデルの最大の強みです。これらの技術のおかげで、これらのLLM(大規模言語モデル)で既に成し遂げられた素晴らしい作業を簡単に引き継ぎ、私たちのタスクに特化させることができます。これは顧客向けのチャットボットや数学的な計算機を作成するためのものであれ、ここでの可能性はほぼ無限です。
- SOTAの性能:強力なクローズドソースモデルを含む、あらゆるサイズの最先端モデルと同等の性能
- カスタム統合:LLaMA 3.2のようなモデルは、潜在的に高価で使いにくいAPIクライアントを構築したり使用したりする必要なしに、さまざまな既存のアプリケーションに簡単に統合できます。
- 視覚言語分析:LLaMAが本当に私たちを感心させたのは、画像データの理解です。OCRから解釈、物体検出まで、あらゆることが可能ですが、明らかにこれらはテキスト出力に制限されています。
- 要約と書き直し:リリースブログに示されているように、モデルは多種多様なテキストタスクに非常に優れていますが、特にこれらの2つのタスクに関して強調されています。
- コスト:LLaMA 3.2は、商業利用を除いて無料で使用・ダウンロードでき、同カテゴリのモデルの中で最も効率的なものの一つです。この軽量モデルは、携帯デバイスに見られるような非常に弱いプロセッサーでも動作します。
弱点
- ピークパフォーマンスの達成:大きな進歩があったにもかかわらず、LLaMA 3.2 は、Claude Sonnet や GPT 4o といった最高の GPT モデルのレベルにはまだ達していません。
- インターネットへのアクセス:ユーザーの大きな開発がない限り、モデルはインターネットにアクセスしたり、新しい情報を学んだりすることができず、それを促進するためにRAGのようなものが必要です。これは、Anthropicなどの現在のトップモデルの多くにとって重要な利点です。
- ライセンス:完全にオープンソースのモデルとは異なり、LLaMAのモデルは非商業利用のみを許可していることに再度注意する価値があります。
モデルの強みを確認したので、デモの実行方法を示しましょう。これにより、自分自身のパーソナルアシスタントツールを作成しながら、モデルを詳細に検討することができます。
DigitalOceanのGPUドロップレットでLLaMA 3.2デモを起動する
このデモでは、HuggingFace Projectsチームの作品を借りることにします。彼らは、LLaMA 3.2 11Bビジョンモデルを使用した本当に完璧なGradioデモをウェブサイトで公開しています。続ける前に、必ず彼らの元の作品をここで見てください。
アプリケーションを適応させるために、私たちは新しくリリースされたDigitalOceanのGPUドロップレットを使用します。これに従うために、Jupyter Notebookを使用して新しいGPUドロップレットを作成するためのこのガイドをお勧めします。このセクションに示されているコードを、私たちのGPUドロップレット上で実行されているJupyter Notebook内で実行する予定で、SSHホスティングを使用してVisual Studio Codeを通じてローカルブラウザでアクセスします。
マシンが起動し、ノートブックを立ち上げてローカルブラウザでアクセスしたら、次のセクションに進んでください。
LLaMA 3.2 パーソナルアシスタントアプリケーションの内訳
HuggingFaceのLLaMA 3.2アプリケーションは、単独でも優れています。これは、私たちがアップロードする任意の画像と対話できる強力なチャットボットとチャットすることを可能にします。このことだけで、オブジェクト内容認識やオブジェクト検出、さらには読み取りのような複雑なアクションを行うことができます。さらに、Gradioを使用して構築されているため、完全にFastAPIもサポートされており、作成されたAPIエンドポイントを使用してアプリケーションと直接やりとりすることができます。
以下のコードブロックを見てください。これは、スペースを節約するためのいくつかの小さな調整を加えた、アプリケーション全体を含んでいます。
from transformers import MllamaForConditionalGeneration, AutoProcessor, TextIteratorStreamer
from PIL import Image
import requests
import torch
from threading import Thread
import gradio as gr
from gradio import FileData
import time
import spaces
ckpt = "meta-llama/Llama-3.2-11B-Vision-Instruct"
model = MllamaForConditionalGeneration.from_pretrained(ckpt,
torch_dtype=torch.bfloat16).to("cuda")
processor = AutoProcessor.from_pretrained(ckpt)
@spaces.GPU
def bot_streaming(message, history, max_new_tokens=250):
txt = message["text"]
ext_buffer = f"{txt}"
messages= []
images = []
for i, msg in enumerate(history):
if isinstance(msg[0], tuple):
messages.append({"role": "user", "content": [{"type": "text", "text": history[i+1][0]}, {"type": "image"}]})
messages.append({"role": "assistant", "content": [{"type": "text", "text": history[i+1][1]}]})
images.append(Image.open(msg[0][0]).convert("RGB"))
elif isinstance(history[i-1], tuple) and isinstance(msg[0], str):
# messages are already handled
pass
elif isinstance(history[i-1][0], str) and isinstance(msg[0], str): # text only turn
messages.append({"role": "user", "content": [{"type": "text", "text": msg[0]}]})
messages.append({"role": "assistant", "content": [{"type": "text", "text": msg[1]}]})
# add current message
if len(message["files"]) == 1:
if isinstance(message["files"][0], str): # examples
image = Image.open(message["files"][0]).convert("RGB")
else: # regular input
image = Image.open(message["files"][0]["path"]).convert("RGB")
images.append(image)
messages.append({"role": "user", "content": [{"type": "text", "text": txt}, {"type": "image"}]})
else:
messages.append({"role": "user", "content": [{"type": "text", "text": txt}]})
texts = processor.apply_chat_template(messages, add_generation_prompt=True)
if images == []:
inputs = processor(text=texts, return_tensors="pt").to("cuda")
else:
inputs = processor(text=texts, images=images, return_tensors="pt").to("cuda")
streamer = TextIteratorStreamer(processor, skip_special_tokens=True, skip_prompt=True)
generation_kwargs = dict(inputs, streamer=streamer, max_new_tokens=max_new_tokens)
generated_text = ""
thread = Thread(target=model.generate, kwargs=generation_kwargs)
thread.start()
buffer = ""
for new_text in streamer:
buffer += new_text
generated_text_without_prompt = buffer
time.sleep(0.01)
yield buffer
demo = gr.ChatInterface(fn=bot_streaming, title="Multimodal Llama",
textbox=gr.MultimodalTextbox(),
additional_inputs = [gr.Slider(
minimum=10,
maximum=1024,
value=250,
step=10,
label="Maximum number of new tokens to generate",
)
],
cache_examples=False,
description="Try Multimodal Llama by Meta with transformers in this demo. Upload an image, and start chatting about it, or simply try one of the examples below. To learn more about Llama Vision, visit [our blog post](https://huggingface.co/blog/llama32). ",
stop_btn="Stop Generation",
fill_height=True,
multimodal=True)
demo.launch(debug=True)
実際に、上記の内容は非常に簡潔なパイプラインを示しています。まず、スクリプトはモデルファイルをGPUに読み込みます。次に、Gradioアプリケーションを起動し、ウェブブラウザを介してモデルと対話できるようにします。前述の文献からの指示に従えば、セルを実行して出力されたURLをコピーし、VS CodeのシンプルなブラウザURLバーに貼り付けて、新しいGradioウィンドウをブラウザで開くことができます。あるいは、demo.launch()パラメータのpublicをTrueに設定して、公開アクセス可能なリンクを開くことができます。
全てをまとめると、実行するとこのようなものが得られます:
このインタラクティブなアプリケーションは、テキストまたは画像データ入力を使用してモデルと対話することを可能にします。私たちの実験では、このプロセスが画像理解、OCR、および物体認識に関して非常に堅牢であることがわかりました。さまざまな画像タイプを試し、モデルのテキストと視覚の領域間での知識の深い相互作用を示す非常に堅牢な結果を得ました。
さらに、このアプリケーション自体は通常のLLMタスクに対して非常によく機能します。私たちはこれを使用して動作するPythonコードを生成し、ストーリーのアウトラインを作成し、このブログ投稿の短い部分を書く手助けさえしました!全体として、このアプリケーションは非常に多用途であり、今後も私たちのLLMタスクに利用し続けるつもりです。
締めくくりの考え
LLaMA 3.2は信じられないほど素晴らしいです。オープンソースのリリースに関しては、過去1年間に市場を支配してきた人気のクローズドソースモデルの品質に向けた具体的な一歩を示しています。それは、コード生成からビジュアル理解、長編小説作成に至るまで、ほぼ同じ能力を持って彼らができることは何でも可能です。私たちはすべての読者に、DigitalOceanのGPUドロップレットでHuggingFaceプロジェクトのデモを試してみることをお勧めします。
これらのモデルの可能性は本当に無限です。動的セキュリティカメラから包括的な供給管理、より優れたチャットボットまで、LLaMAはすでに私たちの周りのさまざまな技術を改善しています。私たちが近い将来に注目していることの一つは、LLaMA 3.2が人気のテキストから画像へのモデル化においてT5モデルの適切な代替として適応できるかどうかです。この技術は、PixArtのようなチームが最新のモデルでSOTA品質を達成するために活用しています。
私たちの期待が正しければ、非常に近い将来にLLaMA 4に注目してください!



