LangChain が OpenVINO™ を公式にサポート

この記事は、Medium に公開されている「LangChain Officially Supports OpenVINO™ Now!」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
https://medium.com/openvino-toolkit/langchain-officially-supports-openvino-now-a88f75793d84

この記事の PDF 版は下記URLからご利用になれます。
https://www.isus.jp/wp-content/uploads/pdf/openvino_27_langchain-officially-supports-openvino-now.pdf

LangChain は、開発者が言語モデルを使用してエンドツーエンドのアプリケーションを構築できるように設計された強力なフレームワークで、大規模言語モデル (LLM) を利用したアプリケーションの作成プロセスを簡素化するツール、コンポーネント、インターフェイスのスイートを提供します。LangChain を使用すると、開発者は RAG やエージェント・パイプラインなどの高レベルのアプリケーションを簡単に構築できます。LangChain が OpenVINO™ を公式にサポートしたことで、LLM、テキスト埋め込み、リランカーを含む OpenVINO™ ベースのコンポーネントを LangChain で直接呼び出すことができるようになりました。この統合により、ローカル RAG およびエージェント・サービスのパフォーマンスが向上します。

![openvino_27_figure1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/8236c4d5-f349-f862-9ece-c229e38ac57b.png)
図: RAG システム・リファレンス・パイプライン

【インストール】
LangChain で OpenVINO™ を呼び出すには、通常の LangChain のインストール手順に加えて、Optimum Intel ライブラリーをインストールします。Optimum Intel には、モデル・コンバーター、ランタイム、NNCF などの OpenVINO™ のすべての依存ファイルがすでに含まれています。

pip install langchain 
pip install --upgrade-strategy eager "optimum[openvino,nncf]"

【LLM】
大規模言語モデルは LangChain フレームワークのコア・モデル・コンポーネントで、RAG システムで最終的な答えを生成したり、エージェント・システムで計画を立ててツールを呼び出すことができます。HuggingFace パイプラインにバックエンドとして OpenVINO™ を追加し、そのコードを直接再利用することで、開発者は LangChain の HuggingFace パイプラインで OpenVINO™ を使用して LLM を初期化できます。model_id には、HuggingFace のモデル ID、ローカルの PyTorch* モデルパス、または OpenVINO™ モデルパスを指定します。

from langchain_community.llms.huggingface_pipeline import HuggingFacePipeline 
 
ov_config = {"PERFORMANCE_HINT": "LATENCY", "NUM_STREAMS": "1", "CACHE_DIR": ""} 
 
ov_llm = HuggingFacePipeline.from_model_id( 
    model_id="gpt2", 
    task="text-generation", 
    backend=" openvino", 
    model_kwargs={"device": "CPU", "ov_config": ov_ config}, 
    pipeline_kwargs={"max_new_tokens": 10}, 
)
OpenVINO™ LLM モデル・オブジェクトを作成した後、推論タスクを LangChain のほかの LLM コンポーネントとしてデプロイできます。

from langchain_core.prompts import PromptTemplate 
 
template = """Question: {question} 
 
Answer: Let's think step by step.""" 
prompt = PromptTemplate.from_template(template) 
 
chain = prompt | ov_llm 
 
question = "What is electroencephalography?" 
 
print(chain.invoke({"question": question}))
LLM をインテルの GPU にデプロイする場合は、model_kwargs={“device”: “GPU”} と指定して、推論を GPU で実行します。Optimum Intel のコマンドライン・ツールを使用して INT4 の重みのモデルをローカルフォルダーに直接エクスポートすることもできます。

optimum-cli export openvino --model gpt2  --weight-format int4 ov_model_dir
OpenVINO™ LLM コンポーネントと使用方法の詳細は、次のウェブサイトを参照してください。
https://python.langchain.com/v0.1/docs/integrations/llms/openvino/ (英語)

【テキスト埋め込み】
テキスト埋め込みモデルは、テキストを特徴ベクトルに変換するために使用されます。テキストの類似性に基づいてリトリーバーを作成するためにも使用できます。このモデルは RAG システムで幅広く使用されていて、テキスト埋め込みタスクから上位 k の候補コンテキストを生成することが期待されます。テキスト埋め込みモデルは、Optimum Intel を利用して特徴抽出タスクによりエクスポートできます。

optimum-cli export openvino — model BAAI/bge-small-en — task feature-extraction
LangChain では、OpenVINOEmbeddings クラスと OpenVINOBgeEmbeddings クラスを利用して従来の BERT 埋め込みモデルと BGE ベースの埋め込みモデルをデプロイできます。次の手順は BGE 埋め込みモデルの例です。

model_name = "BAAI/bge-small-en" 
model_kwargs = {"device": "CPU"} 
encode_kwargs = {"normalize_embeddings": True} 
ov_embeddings = OpenVINOBgeEmbeddings( 
    model_name_or_path=model_name, 
    model_kwargs=model_kwargs, 
    encode_kwargs=encode_kwargs, 
) 

embedding = ov_embeddings.embed_query("hi this is harrison")
OpenVINO™ 埋め込みコンポーネントと使用方法の詳細は、次のウェブサイトを参照してください。

https://python.langchain.com/v0.1/docs/integrations/text_embedding/openvino/ (英語)

【リランカー】
リランカーはテキスト分類モデルの一種で、各候補コンテキストとクエリー間の類似性のリストを取得し、並べ替えた後、RAG システムでコンテキストをさらにフィルタリングできます。リランカーモデルは、Optimum Intel のテキスト分類タスクを利用してエクスポートできます。

optimum-cli export openvino --model BAAI/bge-reranker-large --task text-classification
モデルのデプロイのプロセスで、OpenVINO™ ベースのリランクタスクを OpenVINOReranker クラスで作成し、ContextualCompressionRetriever で呼び出して、リトリーバーの検索結果を圧縮できます。次の例は、リトリーバーの上位 k 件の検索結果を並べ替え、クエリーとの類似性に基づいて上位 4 件の結果を選択して、入力プロンプトの長さをさらに圧縮します。

model_name = "BAAI/bge-reranker-large" 

ov_compressor = OpenVINOReranker(model_name_or_path=model_name, top_n=4) 
compression_retriever = ContextualCompressionRetriever( 
    base_compressor=ov_compressor, base_retriever=retriever 
)
OpenVINO™ リランカー・コンポーネントと使用方法の詳細は、次のウェブサイトを参照してください。

https://python.langchain.com/v0.1/docs/integrations/document_transformers/openvino_rerank/ (英語)

【まとめ】
OpenVINO™ ベースのモデルのタスクが LangChain フレームワークに統合されたことにより、開発者は LangChain を使用して主要なモデルのタスクの推論パフォーマンスをより簡単に向上できるようになります。

＜関連情報 (英語)＞
LangChain と OpenVINO™ ベースの RAG の例:
https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/llm-rag-langchain

LangChain と OpenVINO™ ベースのエージェントの例:
https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/llm-agent-langchain

＜OpenVINO™ ツールキットとは＞
AI を加速する無償のツールである OpenVINO™ ツールキットは、インテルが無償で提供しているインテル製の CPU や GPU、VPU、FPGA などのパフォーマンスを最大限に活用して、コンピューター・ビジョン、画像関係をはじめ、自然言語処理や音声処理など、幅広いディープラーニング・モデルで推論を最適化し高速化する推論エンジン / ツールスイートです。

OpenVINO™ ツールキット・ページでは、ツールの概要、利用方法、導入事例、トレーニング、ツール・ダウンロードまでさまざまな情報を提供しています。ぜひ特設サイトにアクセスしてみてください。

https://www.intel.co.jp/content/www/jp/ja/internet-of-things/openvino-toolkit.html

◆法務上の注意書き

インテルのテクノロジーを使用するには、対応したハードウェア、ソフトウェア、またはサービスの有効化が必要となる場合があります。

絶対的なセキュリティーを提供できる製品またはコンポーネントはありません。

実際の費用と結果は異なる場合があります。

© Intel Corporation. Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です