はじめに
近年、言語モデリング(LLM)分野の発展はめざましく、プロプライエタリなモデルからオープンソースのモデルまで、様々なLLMが開発されています。またこの流れに伴い、LLMを有効に活用するためのサービスやツールが数多く提供されています。
本記事ではこれらの動向を踏まえ、各モデルに応じた推論の実行方法および周辺のツール類に焦点を当てて紹介します。
LLMの実行方法
プロプライエタリモデル
非公開のプロプライエタリモデルについては、開発元が提供する環境上でLLMを実行することができます。みなさんご存知、ChatGPTもその一つです。
また開発元が提供しているAPIを利用して推論を実行できる場合もあります。こちらの場合は、開発元からAPIキーを取得する必要があります。
どのサービスであってもAPIを呼び出していることに変わりはないので、標準ライブラリを用いたHTTPリクエストによりAPIを呼び出すことができます。
以下Pythonによる呼び出しの例です。
# HTTPリクエストによるGPT-3.5の呼び出し
import requests
import json
response = requests.post(
'https://api.openai.com/v1/chat/completions',
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer $API_KEY'
},
data = json.dumps({
'model': 'gpt-3.5-turbo',
'messages': [{'role': 'user', 'content': 'Hello!'}],
})
)
またプロプライエタリモデルには概ね、API呼び出しのための専用のライブラリが準備されています。
先程の標準ライブラリによる呼び出しに比べ、より簡易に記述することができます。
使用するLLM | Pythonライブラリ名 |
---|---|
GPT-3.5, GPT-4 | openai |
PaLM 2 | vertexai |
Command | cohere |
︙ | ︙ |
以下はGPT-3.5とPaLM 2を呼び出した例です。
# openaiライブラリを用いたGPT-3.5の呼び出し
import openai
response = client.chat.completions.create(
model = "gpt-3.5-turbo",
messages = [
{"role": "user", "content": "Hello!"},
]
)
# vertexaiライブラリを用いたPaLM 2の呼び出し
from vertexai.language_models import TextGenerationModel
model = TextGenerationModel.from_pretrained("text-bison@001")
response = model.predict(
"Hello!",
)
オープンソースモデル
手元の環境で実行
オープンソースのモデルについては、学習済みのモデルを手元の環境にダウンロードし、実行することができます。
オープンソースモデルはその多くがHuggingface Transformers形式に準拠する形で提供されており、Model Hubに公開されています。
以下はTransformersライブラリを用いてELYZA-7bを動かしてみた例です。
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
tokenizer = AutoTokenizer.from_pretrained(
"elyza/ELYZA-japanese-Llama-2-7b-instruct"
)
model = AutoModelForCausalLM.from_pretrained(
"elyza/ELYZA-japanese-Llama-2-7b-instruct",
torch_dtype=torch.float16,
device_map="auto"
)
prompt = """<s>[INST]
こんにちは![/INST]"""
with torch.no_grad():
token_ids = tokenizer.encode(prompt, return_tensors="pt")
output_ids = model.generate(
token_ids.to(model.device),
max_new_tokens=256,
pad_token_id=tokenizer.pad_token_id,
eos_token_id=tokenizer.eos_token_id,
)
output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1) :])
print(output)
たったこれだけのプログラムで、LLMのダウンロード・推論ができます。
どこかにモデルをデプロイしAPIでアクセスする
LLMの実行にあたっては、学習はもちろん、学習済みモデルを用いた推論でも大きな計算資源が要求されます。そのためLLMを実際にサービスとして活用していく段階では、どこかにモデルをデプロイし、APIでアクセスするというのも一つの選択肢になります。
デプロイのための具体的なツールについては次章で紹介します。
周辺のツール類
LLMをデプロイするためのサービス
Hugging face
Hugging Faceでは、同社のサービス上で共有されているLLMについて、APIを通じて推論などを実行するためのサービスを提供しています。
Inference API
無料で使用でき、主にモデルのデモ目的で使用されます。
Inference Endpoints
有料で、高度なセットアップやセキュリティを提供します。
Amazon Bedrock
Amazonや主要なAIスタートアップ企業が提供するLLMを、APIを通じて利用できるようにするフルマネージドサービスです。様々なLLMから、ユースケースごとに適したモデルを選択できます。
ClaudeやCommandのようなプロプライエタリのモデルをサポートしているのが特徴です。
その他
そのほかにも、ReplicateやFireworks.aiなども同様のサービスを提供しています。
API呼び出しをサポートするためのサービス
LiteLLM
上記のような様々なAPI呼び出しを同様のインターフェイスで実現するためのライブラリです。
OpenAIやVertexAIをはじめとして、HuggingFaceなどもサポートしており、全て同様の形式で呼び出すことができます。
軽量化のためのツール
LLMの実行には多くの計算資源が要求されることから、量子化やランタイムの高速化など、ローカルで実行するための様々な取り組みがなされています。以下はそれら取り組みの例です。
llama.cpp
C++で実装されたLLMのランタイムです。ランタイムの高速化に加え、GGUFというフォーマットで量子化されたモデルを用いることで、CPUのみのマシンでも実行可能な環境を実現しています。
有名なオープンソースモデルの多くが量子化されており、それらはHugging Face上に公開されています。
またLlamaベース以外のLLMにも一部対応しています(Falcon etc.)。
AutoGPTQ
モデルをGPTQというフォーマットで量子化するためのライブラリです。量子化したモデルはTransformersライブラリで実行することが出来ます。
GPT4All
モデルとしてのGPT4Allとは別に、CPU環境上で動作する、LLMを学習・推論するためのソフトウェアとしてのGPT4Allというものが存在します。こちらのバックエンドはC APIを中心に構築されており、高速化を実現するとともに、C++やPythonなど他のプログラミング言語に拡張することができます。
Ollama
LLMをローカルで実行するためのアプリケーションです。Llama 2ベースのLLMを多数サポートしており、量子化モデルを使用することでローカルでの推論を実現しています。デフォルトでは4bit量子化モデルが使用されます。
また起動しているアプリケーションにAPIを通じてアクセスすることで、推論を実行することもできます。
LLMの機能を拡張するためのツール
LangChain
LangChainは、LLMの機能拡張を効率的に実装するためのライブラリです。
主要6機能は以下の通りです。
- Models:LLMの選択
- Prompt:プロンプトの管理と最適化
- Indexes:外部データの利用
- Chains:複数プロンプトで一連の処理の実行
- Agents:ツールの実行
- Memory:対話履歴の保持
またサポートしている範囲が広く、例えば1
のLLMの選択においても多数の方法が提供されています。上で紹介したツールは全てサポートされており、その中から適切なものを選択することが出来ます。
Llamaindex
Llamaindexは、LLMと外部データを接続するためのインターフェースを提供するライブラリです。外部データを適切な形で保存し、そこから必要なデータを抽出し、プロンプトに埋め込むといった処理を、効率よく、安全に実装することが出来ます。
さいごに
本記事ではLLMの基本的な推論方法と周辺ツール類についてまとめました。こうしてまとめてみて、LLM活用に関する様々な取り組みについても知ることができました。この記事がみなさまのLLMライフの一助になりましたら幸いです。
最後までお読みいただきありがとうございます。
※記載内容に誤りがございましたら、ご指摘いただけますと幸いです。随時修正いたします。