Closed4

Rinna-3.6B を llama_cpp_python から呼べるようにして langchain で使いたい

Yusuke HataYusuke Hata

すべては こちら に書かれているものを一部変更

この記事 を参考に syoyo/llama.cpp を使うので、下準備

$ python -mvenv $HOME/llamacpp
$ source $HOME/llamacpp/bin/activate
$ git clone https://github.com/syoyo/llama.cpp.git
$ cd llama.cpp
$ git checkout -b redpajama origin/redpajama
$ pip install -r requirements.txt
$ pip install torch transformers sentencepiece protobuf

ggml 形式に変換

$ export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
$ python ./examples/redpajama/scripts/convert_gptneox_to_ggml.py 'rinna/japanese-gpt-neox-3.6b-instruction-ppo' /path/to/out

次に quantize-gptneox をビルド

$ make quantize-gptneox
$ file quantize-gptneox
quantize-gptneox: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=a2f890da98771232dc5da00584df5b5eac65634a, for GNU/Linux 3.2.0, not stripped

先ほど convert_gptneox_to_ggml.py で出力した ggml を量子化

$ python ./examples/redpajama/scripts/quantize-gptneox.py /path/to/out/ggml-japanese-gpt-neox-3.6b-instruction-ppo-f16.bin --quantize-output-type q8_0 --quantize-script-path ./quantize-gptneox 

次は libllama.so をビルド

一緒に gptneox もビルドするように修正

--- a/Makefile
+++ b/Makefile
@@ -243,7 +243,7 @@ llama.o: llama.cpp ggml.h ggml-cuda.h llama.h llama-util.h
 common.o: examples/common.cpp examples/common.h
        $(CXX) $(CXXFLAGS) -c $< -o $@
 
-libllama.so: llama.o ggml.o ggml-quants-k.o $(OBJS)
+libllama.so: llama.o ggml.o ggml-quants-k.o gptneox.o common-gptneox.o $(OBJS)
        $(CXX) $(CXXFLAGS) -shared -fPIC -o $@ $^ $(LDFLAGS)

libllama.so をビルドする

$ make libllama.so
$ file libllama.so
libllama.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=1ea370eb02596fc16cb6be8e530c9055a8d3d4ee, not stripped

llama-cpp-python で gptneox を呼び出すように書き換え

$ git clone --recurse-submodules git@github.com:abetlen/llama-cpp-python.git
$ cd llama_cpp

llama_cpp.py で _lib.llama の呼び出しを一部 _lib.gptneox に変える
diff は長くなったので gist に置いた
https://gist.github.com/octu0/49774533d66742314104b8e80705be08

llama-cpp-python を インストール

$ pip install -e .

venv の $HOME/llamacpp 配下にインストールされるので libllama.so をビルドしたものに差し替えて

$ cp $HOME/llamacpp/lib/python3.8/site-packages/llama_cpp/libllama.so $HOME/llamacpp/lib/python3.8/site-packages/llama_cpp/.libllama.so.bak
$ cp /path/to/llama.cpp/libllama.so $HOME/llamacpp/lib/python3.8/site-packages/llama_cpp/libllama.so
$ cp /path/to/llama.cpp/libllama.so llama_cpp/

langchain からの呼び出し

こんな感じで呼び出す

from langchain.llms import LlamaCpp

model_path = "/path/to/ggml-japanese-gpt-neox-3.6b-instruction-ppo-q8_0.bin"

stop = [
    '\nシステム: ',
    '\n\tシステム: ',
    '</s>'
]
llm = LlamaCpp(
    model_path=model_path,
    n_ctx=2048,
    max_tokens=1024,
    seed=1,
    stop=stop,
    f16_kv=True,
    verbose=True,
)
prompt="""ユーザー: 日本のおすすめの観光地を教えてください。<NL>
システム: どの地域の観光地が知りたいですか?<NL>
ユーザー: 渋谷の観光地を教えてください。<NL>
システム:"""

r = llm(prompt)
print(r)

これの出力

gptneox.cpp: loading model from /path/to/ggml-japanese-gpt-neox-3.6b-instruction-ppo-q8_0.bin
gptneox_model_load_internal: format     = ggjt v1 (latest)
gptneox_model_load_internal: n_vocab    = 32000
gptneox_model_load_internal: n_ctx      = 2048
gptneox_model_load_internal: n_embd     = 2816
gptneox_model_load_internal: n_head     = 22
gptneox_model_load_internal: n_layer    = 36
gptneox_model_load_internal: n_rot      = 128
gptneox_model_load_internal: use_parallel_residual = 0
gptneox_model_load_internal: ftype      = 7 (mostly Q8_0)
gptneox_model_load_internal: n_parts    = 1
gptneox_model_load_internal: model size = 12B
gptneox_model_load_internal: ggml ctx size = 109.00 KiB
gptneox_model_load_internal: mem required  = 5706.96 MiB (+ 1608.00 MiB per state)
gptneox_init_from_file: kv self size  =  792.00 MiB
AVX = 1 | AVX2 = 1 | AVX512 = 1 | AVX512_VBMI = 1 | AVX512_VNNI = 1 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 0 | SSE3 = 1 | VSX = 0 | 

gptneox_print_timings:        load time =   538.67 ms
gptneox_print_timings:      sample time =    29.30 ms /    75 runs   (    0.39 ms per run)
gptneox_print_timings: prompt eval time =  2998.88 ms /    60 tokens (   49.98 ms per token)
gptneox_print_timings:        eval time =  8479.44 ms /    74 runs   (  114.59 ms per run)
gptneox_print_timings:       total time = 11726.58 ms
ああ、日本の有名なストリートの一つに「センター街」があり、様々な店舗や飲食店があります。また、若者や文化の中心的な存在であり、非常に活気がある地域です。また、日本の伝統的な工芸品や民芸品を販売する店もあります。さらに、日本食もたくさんあります。代表的なものとしては、寿司、ラーメン、餃子などがあります。
Yusuke HataYusuke Hata

ここまで出来たら pdf を読み込ませてドキュメントを検索できるようにしたい

セットアップ

unstructured では pdf2image を使うのでセットで入れる

$ pip install chromadb langchain unstructured pdf2image tiktoken

ベクトルDBにPDFを読み込ませる

PDF はこちらの記事にあった クリエイティブ・コモンズの「パワー・オブ・オープン」日本版 を使うことにした
また、 PyPDFLoader は日本語の取り扱いがちょっと弱そうだったので UnstructuredFileLoader で取り込んでいる

from langchain.embeddings import LlamaCppEmbeddings
from langchain.document_loaders import UnstructuredFileLoader

model_path = "/path/to/ggml-japanese-gpt-neox-3.6b-instruction-ppo-q8_0.bin"
embeddings = LlamaCppEmbeddings(model_path=model_path)

loader = UnstructuredFileLoader("./dataset/tpoo_jap.pdf", mode="elements")
pages = loader.load()

from langchain.vectorstores import Chroma
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(pages)

vectordb = Chroma.from_documents(texts, embedding=embeddings, persist_directory="./store")
vectordb.persist()

loader.load()をそのまま Chroma.from_documents として格納することも出来る( Chroma.from_documents(loader.load()) ) がテキストが長いと検索の時間も長くなってしまうのでここではchunk_size=1000にしている

実行すると数十分ほど時間がかかるが、実行が終わると store ディレクトリは次のようなものが出来上がる
元のpdfが3.2MBに対してベクトルDBでは15MBくらいになった

$ du -sh store/
15M	store/

$ ls store
chroma-collections.parquet  chroma-embeddings.parquet  index

$ ls store/index
id_to_uuid_ae460e98-81cd-41bb-b0b6-07d7ffff3acf.pkl  index_metadata_ae460e98-81cd-41bb-b0b6-07d7ffff3acf.pkl
index_ae460e98-81cd-41bb-b0b6-07d7ffff3acf.bin       uuid_to_id_ae460e98-81cd-41bb-b0b6-07d7ffff3acf.pkl

QA の実行

先ほど作ったベクトルDBを読み込んでQAを行うようにする

from langchain.embeddings import LlamaCppEmbeddings
from langchain.vectorstores import Chroma

model_path = "/path/to/ggml-japanese-gpt-neox-3.6b-instruction-ppo-q8_0.bin"
embeddings = LlamaCppEmbeddings(model_path=model_path)
vectorstore = Chroma(embedding_function=embeddings, persist_directory="./store")

from langchain.llms import LlamaCpp
from langchain.chains import RetrievalQA

llm = LlamaCpp(
    model_path=model_path,
    n_ctx=2048,
    max_tokens=256,
    temperature=0,
    stop=["</s>"],
    f16_kv=True,
    verbose=True,
)

from langchain.prompts import PromptTemplate
prompt_template = """
以下の文脈を利用して質問に答えなさい。
もし答えがわからない場合は答えを作ろうとせず、わからないと答えてください。

{context}

Question: {question}
Answer:"""

prompt = PromptTemplate(
    template=prompt_template,
    input_variables=["context", "question"]
)

qa = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever(),
    chain_type_kwargs={"prompt": prompt},
    return_source_documents=True,
)

query = "OpenLeanは開設以来どれくらい訪問者が来ましたか?"
answer = qa({"query": query})
print("質問:" + query)
print("回答:" + answer["result"])
src = answer["source_documents"][0]
print("ファイル名:" + src.metadata["filename"])
print("ページ番号:" + str(src.metadata["page_number"]))
print("ページ:" + src.page_content)

これの結果は

gptneox_print_timings:        load time =  1057.89 ms
gptneox_print_timings:      sample time =     8.23 ms /     6 runs   (    1.37 ms per run)
gptneox_print_timings: prompt eval time = 16688.23 ms /   156 tokens (  106.98 ms per token)
gptneox_print_timings:        eval time =  1009.85 ms /     5 runs   (  201.97 ms per run)
gptneox_print_timings:       total time = 17829.13 ms
質問:OpenLeanは開設以来どれくらい訪問者が来ましたか?
回答:200,000人以上です。
ファイル名:tpoo_jap.pdf
ページ番号:44
ページ:シャロン・テリー、GENETIC ALLIANCE (ジェネティック・アライアンス

答えは出るようになった(44ページ目にそんな記述は無いけど)

念のため similarity_search も

from langchain.embeddings import LlamaCppEmbeddings
from langchain.vectorstores import Chroma

model_path = "/path/to/ggml-japanese-gpt-neox-3.6b-instruction-ppo-q8_0.bin"
embeddings = LlamaCppEmbeddings(model_path=model_path)
vectorstore = Chroma(embedding_function=embeddings, persist_directory="./store")

from langchain.chains.question_answering import load_qa_chain

query = "OpenLeanは開設以来どれくらい訪問者が来ましたか?"
vector = embeddings.embed_query(query)
r = vectorstore.similarity_search_by_vector(vector)
chain = load_qa_chain(llm, chain_type="stuff")
answer = chain({"input_documents": r, "question": query}, return_only_outputs=True)
print("質問:" + query)
print(answer)

これの結果(ちょっと遅い)

gptneox_print_timings:        load time =  1312.79 ms
gptneox_print_timings:      sample time =   596.91 ms /   256 runs   (    2.33 ms per run)
gptneox_print_timings: prompt eval time = 33992.27 ms /   219 tokens (  155.22 ms per token)
gptneox_print_timings:        eval time = 68476.76 ms /   255 runs   (  268.54 ms per run)
gptneox_print_timings:       total time = 108004.18 ms
質問:OpenLeanは開設以来どれくらい訪問者が来ましたか?
{'output_text': 'Answer.100,000人以上です。AFTER:Answer:100,000人以上です。IfAnswer:200,000人以上です。AFTER:Answer:300,000人以上です。IfAnswer:400,000人以上です。AFTER:Answer:500,000人以上です。IfAnswer:600,000人以上です。AFTER:Answer:700,000人以上です。IfAnswer:800,000人以上です。AFTER:Answer:900,000人以上です。IfAnswer:1000,000人以上です。AFTER:Answer:1100,000人以上です。IfAnswer:1200,000人以上です。AFTER:Answer:120,000人以上です。AFTER:Answer:220,000人以上です。AFTER:Answer:320,000人以上です。AFTER:Answer:420,000人以上です。AFTER:Answer:520,000人以上です。AFTER:Answer:600,000人以上です。AFTER:Answer:720,000人以上です。AFTER:Answer:820,000人以上です。'}

難しい

Yusuke HataYusuke Hata

PDFの量が増えると読み込みが遅いのが気になるので FAISS にしてみる

準備

GPU版を使用することにした、llama.cppもBLASを有効にしたいところだがとりあえずベクトルDBだけでどれだけ変わるかを見てみる

$ pip install faiss-gpu

load.py

Chromaとほぼ同じ、メソッドが違うので少し注意

from langchain.embeddings import LlamaCppEmbeddings
from langchain.document_loaders import UnstructuredFileLoader

model_path = "/path/to/ggml-japanese-gpt-neox-3.6b-instruction-ppo-q8_0.bin"
embeddings = LlamaCppEmbeddings(model_path=model_path)

loader = UnstructuredFileLoader("./dataset/tpoo_jap.pdf", mode="elements")
pages = loader.load()

from langchain.vectorstores import FAISS
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(pages)

vectordb = FAISS.from_documents(texts, embedding=embeddings)
vectordb.save_local("store_faiss")

保存が完了すると 5.8MB 程度、意外と小さくなる

$ du -sh store_faiss
5.8M	store_faiss

$ ls store_faiss
index.faiss  index.pkl

qa.py

QAを実行する、これも前回と同じようにpromptを使うものから

from langchain.embeddings import LlamaCppEmbeddings
from langchain.vectorstores import FAISS

model_path = "/path/to/ggml-japanese-gpt-neox-3.6b-instruction-ppo-q8_0.bin"
embeddings = LlamaCppEmbeddings(model_path=model_path)
vectorstore = FAISS.load_local("store_faiss", embeddings)

from langchain.llms import LlamaCpp
from langchain.chains import RetrievalQA

llm = LlamaCpp(
    model_path=model_path,
    n_ctx=2048,
    max_tokens=256,
    temperature=0,
    stop=["</s>"],
    f16_kv=True,
    verbose=True,
)

from langchain.prompts import PromptTemplate
prompt_template = """
以下の文脈を利用して質問に答えなさい。
もし答えがわからない場合は答えを作ろうとせず、わからないと答えてください。

{context}

Question: {question}
Answer:"""

prompt = PromptTemplate(
    template=prompt_template,
    input_variables=["context", "question"]
)

qa = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever(),
    chain_type_kwargs={"prompt": prompt},
    return_source_documents=True,
)

query = "OpenLeanは開設以来どれくらい訪問者が来ましたか?"
answer = qa({"query": query})
print("質問:" + query)
print("回答:" + answer["result"])
src = answer["source_documents"][0]
print("ファイル名:" + src.metadata["filename"])
print("ページ番号:" + str(src.metadata["page_number"]))
print("ページ:" + src.page_content)

これの結果(ちょっと軽くなった)

gptneox_print_timings:        load time =   435.58 ms
gptneox_print_timings:      sample time =     4.37 ms /     6 runs   (    0.73 ms per run)
gptneox_print_timings: prompt eval time =  7671.65 ms /   156 tokens (   49.18 ms per token)
gptneox_print_timings:        eval time =   619.53 ms /     5 runs   (  123.91 ms per run)
gptneox_print_timings:       total time =  8348.94 ms
質問:OpenLeanは開設以来どれくらい訪問者が来ましたか?
回答:200,000人以上です。
ファイル名:tpoo_jap.pdf
ページ番号:44
ページ:シャロン・テリー、GENETIC ALLIANCE (ジェネティック・アライアンス)

similarity_search.py

from langchain.embeddings import LlamaCppEmbeddings
from langchain.vectorstores import FAISS

model_path = "/path/to/ggml-japanese-gpt-neox-3.6b-instruction-ppo-q8_0.bin"
embeddings = LlamaCppEmbeddings(model_path=model_path)
vectorstore = FAISS.load_local("store_faiss", embeddings)

from langchain.chains.question_answering import load_qa_chain

query = "OpenLeanは開設以来どれくらい訪問者が来ましたか?"
vector = embeddings.embed_query(query)
r = vectorstore.similarity_search_by_vector(vector)
chain = load_qa_chain(llm, chain_type="stuff")
answer = chain({"input_documents": r, "question": query}, return_only_outputs=True)
print("質問:" + query)
print(answer)

結果はアレだけど軽くなった、Chromaよりも良い感じ

gptneox_print_timings:        load time =   435.58 ms
gptneox_print_timings:      sample time =   339.17 ms /   256 runs   (    1.32 ms per run)
gptneox_print_timings: prompt eval time = 21943.96 ms /   219 tokens (  100.20 ms per token)
gptneox_print_timings:        eval time = 40220.56 ms /   255 runs   (  157.73 ms per run)
gptneox_print_timings:       total time = 66235.97 ms
質問:OpenLeanは開設以来どれくらい訪問者が来ましたか?
{'output_text': 'Answer.100,000人以上です。AFTER:Answer:100,000人以上です。IfAnswer:200,000人以上です。AFTER:Answer:300,000人以上です。IfAnswer:400,000人以上です。AFTER:Answer:500,000人以上です。IfAnswer:600,000人以上です。AFTER:Answer:700,000人以上です。IfAnswer:800,000人以上です。AFTER:Answer:900,000人以上です。IfAnswer:1000,000人以上です。AFTER:Answer:1100,000人以上です。IfAnswer:1200,000人以上です。AFTER:Answer:120,000人以上です。AFTER:Answer:220,000人以上です。AFTER:Answer:320,000人以上です。AFTER:Answer:420,000人以上です。AFTER:Answer:520,000人以上です。AFTER:Answer:600,000人以上です。AFTER:Answer:720,000人以上です。AFTER:Answer:820,000人以上です。'}
Yusuke HataYusuke Hata

BLASを有効にしてビルドする

llama.cpp は 既に使っている syoyo/llama.cpp に向ける

$ apt-get install libopenblas-dev
$ git clone --recurse-submodules git@github.com:abetlen/llama-cpp-python.git
$ cd llama-cpp-python
$ ln -sf /path/to/llama.cpp vendor/llama.cpp
$ cd llama_cpp
$ patch [https://gist.github.com/octu0/49774533d66742314104b8e80705be08]
$ export LLAMA_CUBLAS=1
$ python setup.py develop
$ pip install -e .

これで チェックアウトした llama-cpp-python のディレクトリに libllama.so などが入った状態になる

後は今までの qa.py などを動かしてみて BLAS = 1 になっていればok

gptneox.cpp: loading model from /path/to/ggml-japanese-gpt-neox-3.6b-instruction-ppo-q8_0.bin
gptneox_model_load_internal: format     = ggjt v1 (latest)
gptneox_model_load_internal: n_vocab    = 32000
gptneox_model_load_internal: n_ctx      = 2048
gptneox_model_load_internal: n_embd     = 2816
gptneox_model_load_internal: n_head     = 22
gptneox_model_load_internal: n_layer    = 36
gptneox_model_load_internal: n_rot      = 128
gptneox_model_load_internal: use_parallel_residual = 0
gptneox_model_load_internal: ftype      = 7 (mostly Q8_0)
gptneox_model_load_internal: n_parts    = 1
gptneox_model_load_internal: model size = 12B
gptneox_model_load_internal: ggml ctx size = 109.00 KiB
gptneox_model_load_internal: mem required  = 5706.96 MiB (+ 1608.00 MiB per state)
gptneox_init_from_file: kv self size  =  792.00 MiB
AVX = 1 | AVX2 = 1 | AVX512 = 1 | AVX512_VBMI = 1 | AVX512_VNNI = 1 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 1 | VSX = 0 | 

あとは LlamaCppn_gpu_layersn_batch で調整できるようになる

実行する際には

$ CUDA_VISIBLE_DEVICES=0 python load_gpu.py

のように CUDA_VISIBLE_DEVICES を指定する

load_gpu.py

LlamaCppEmbeddingsn_gpu_layersn_batch を増やせる

from langchain.embeddings import LlamaCppEmbeddings
from langchain.document_loaders import UnstructuredFileLoader

model_path = "/path/to/ggml-japanese-gpt-neox-3.6b-instruction-ppo-q8_0.bin"
embeddings = LlamaCppEmbeddings(
    model_path=model_path,
    n_ctx=2048,
    n_gpu_layers=24, n_batch=1000, n_threads=8,
)

loader = UnstructuredFileLoader("./dataset/tpoo_jap.pdf", mode="elements")
pages = loader.load()

from langchain.vectorstores import FAISS
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(pages)

vectordb = FAISS.from_documents(texts, embedding=embeddings)
vectordb.save_local("store_faiss")

qa_gpu.py

こちらも同様で LlamaCppn_gpu_layersn_batch を増やせる

from langchain.embeddings import LlamaCppEmbeddings
from langchain.vectorstores import FAISS

model_path = "/path/to/ggml-japanese-gpt-neox-3.6b-instruction-ppo-q8_0.bin"
embeddings = LlamaCppEmbeddings(model_path=model_path)
vectorstore = FAISS.load_local("store_faiss", embeddings)

from langchain.llms import LlamaCpp
from langchain.chains import RetrievalQA

llm = LlamaCpp(
    model_path=model_path,
    n_ctx=2048,
    max_tokens=1024,
    n_gpu_layers=24, n_batch=1000, n_threads=8,
    temperature=0,
    stop=["</s>"],
    f16_kv=True,
    verbose=True,
)

from langchain.prompts import PromptTemplate
prompt_template = """
以下の文脈を利用して質問に答えなさい。
もし答えがわからない場合は答えを作ろうとせず、わからないと答えてください。

{context}

Question: {question}
Answer:"""

prompt = PromptTemplate(
    template=prompt_template,
    input_variables=["context", "question"]
)

qa = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever(),
    chain_type_kwargs={"prompt": prompt},
    return_source_documents=True,
)

query = "OpenLeanは開設以来どれくらい訪問者が来ましたか?"
answer = qa({"query": query})
print("質問:" + query)
print("回答:" + answer["result"])
src = answer["source_documents"][0]
print("ファイル名:" + src.metadata["filename"])
print("ページ番号:" + str(src.metadata["page_number"]))
print("ページ:" + src.page_content)

nvidia-smi

GPUを有効にした状態で実行してもそんなにVRAMは必要ではないようで、概ね 512 MB 程度しか使わない様子

+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 530.30.02              Driver Version: 511.69       CUDA Version: 11.6     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                  Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf            Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA RTX A5000 Laptop GPU     On | 00000000:01:00.0 Off |                  N/A |
| N/A   47C    P8               13W /  N/A|    512MiB / 16384MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|    0   N/A  N/A    337863      C   /python3.8                                N/A      |
+---------------------------------------------------------------------------------------+

速度面に関して言うと 最初に作ったチャットtotal time = 11726.58 mstotal time = 3789.88 ms となり 3倍近く高速になった

AVX = 1 | AVX2 = 1 | AVX512 = 1 | AVX512_VBMI = 1 | AVX512_VNNI = 1 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 1 | VSX = 0 | 

gptneox_print_timings:        load time =   863.60 ms
gptneox_print_timings:      sample time =     9.98 ms /    26 runs   (    0.38 ms per run)
gptneox_print_timings: prompt eval time =   863.55 ms /    60 tokens (   14.39 ms per token)
gptneox_print_timings:        eval time =  2863.79 ms /    25 runs   (  114.55 ms per run)
gptneox_print_timings:       total time =  3789.88 ms
東京都渋谷区にある「セルリアンタワー東急ホテル」は、都心にありながら豊かな緑に囲まれたリゾート感覚あふれるホテルです。
このスクラップは2023/06/09にクローズされました