7
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OpenAIを利用せずローカル環境でEmbedding DBを用いた質問応答の効率性は? (1)埋め込み速度

Last updated at Posted at 2023-09-26

はじめに

ChatGPTを活用したPDFやテキスト文書の埋め込みデータベースを用いたQ&Aサービスや手法が多く公開されている。これらは非常に便利であるが、社内の機密情報など、セキュリティ上の理由から外部サービスの使用が制限されるケースも存在する。そのため、今回はローカル環境でこれらのサービスを効率的な速度で再現できるかどうかを検証する。

まとめ

今回は Llama2、Llama2(日本語)、E5 の3つのモデルを使用して埋め込み速度を検証した。GPUなしの環境では、Llama2を使用した埋め込みには多くの時間がかかることが明らかになり、E5は現実的な速度で埋め込みが可能だと確かめられた。

今後の課題として、対象ファイルの内容が増加した場合の埋め込み時間の推移の確認や、GPUを利用した場合の速度向上の可能性が挙げられる。

埋め込み速度の検討

対象ファイルの内容を埋め込み処理(Embedding)する速度について確認する。

サンプルソースコード

Llama2の4bit量子化したモデルを使用して埋め込みを行う場合にソースコードをサンプルとして示す。

llm_cvs_embedding.py
from langchain.vectorstores import Chroma
from langchain.document_loaders.csv_loader import CSVLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import LlamaCppEmbeddings

# load document
loader = CSVLoader(file_path='./knowledge_db.csv',  source_column='source')
data = loader.load()

text_splitter = CharacterTextSplitter(
    separator = " ",  
    chunk_size = 1000,  
    chunk_overlap  = 0, 
)

docs = text_splitter.split_documents(data)

# Indicate model for embedding
embeddings = LlamaCppEmbeddings(model_path="./models/llama-2-7b-chat.q4_K_M.gguf", n_ctx=4096)

# Stores information about the split text in a vector store
vectorstore = Chroma.from_documents(docs, embedding=embeddings, persist_directory="./chroma")
vectorstore.persist()

埋め込みに利用するサンプルファイル

調査に使用したドキュメントデータ (knowledge_db.csv)

$ wc knowledge_db.csv 
単語数 バイト数 文字数
10,644 250,146 175,506

テスト環境 (PC)

利用するモデルはCPUのみを利用して動作させる

説明 サンプル出力
OS Ubuntu 22.04
CPUの種別 13th Gen Intel(R) Core(TM) i7-13700
Performance-core 個数 8
Efficient-cores個数 8
スレッド数 24
メモリの総量(GByte) 125 GB
GPUの種別 Intel Corporation Device a780 (rev 04)

調査コマンド

time コマンドで real 時間を計測した。

sample
$ time python3 ./llm_cvs_embedding.py 

real    73m26.673s
user    876m48.304s
sys     0m11.906s

モデル毎の埋め込み速度

Llama2、Llama2(日本語)、E5(EmbEddings from bidirEctional Encoder rEpresentations)の3つのモデルの結果に加え、参考としてgpt-3.5turboの結果を示す。

Llama2を使用した埋め込み速度はE5と比較して非常に遅い。今回のサンプルは17万文字と比較的小さいファイルであり、その埋め込みに一時間以上を用した。一方、E5は3分弱で埋め込みが完了し、Llama2と比較して非常に高速に動作している。

Cloudで動作しているChatGPTの埋め込み速度は圧倒的である。

モデル パラメータ数  環境 処理時間 説明
llama-2-7b-chat.q4_K_M 7B(70億) PC 77m17s Llama2ローカルで動作させるために4bit量子化したモデル
ELYZA-japanese-Llama-2-7b-fast-instruct-q4_K_M 7B(70億) PC 73m26s Llama2をベースとした商用利用可能な日本語LLM(4bit量子化)
multilingual-e5-large 560M(5億) PC 2m35s 多言語のテキスト埋め込み用のモデル
gpt-3.5-turbo 175B(1750億) Cloud 5s OpenAIによって開発された高度な会話型AIモデル

image.png

参考情報

Llama2

E5

7
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?