Rinna-3.6B を llama_cpp_python から呼べるようにして langchain で使いたい
すべては こちら に書かれているものを一部変更
この記事 を参考に 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 に置いた
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
ああ、日本の有名なストリートの一つに「センター街」があり、様々な店舗や飲食店があります。また、若者や文化の中心的な存在であり、非常に活気がある地域です。また、日本の伝統的な工芸品や民芸品を販売する店もあります。さらに、日本食もたくさんあります。代表的なものとしては、寿司、ラーメン、餃子などがあります。
ここまで出来たら 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人以上です。'}
難しい
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人以上です。'}
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 |
あとは LlamaCpp で n_gpu_layers
と n_batch
で調整できるようになる
実行する際には
$ CUDA_VISIBLE_DEVICES=0 python load_gpu.py
のように CUDA_VISIBLE_DEVICES を指定する
load_gpu.py
LlamaCppEmbeddings
に n_gpu_layers
と n_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
こちらも同様で LlamaCpp
に n_gpu_layers
と n_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 ms
が total 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
東京都渋谷区にある「セルリアンタワー東急ホテル」は、都心にありながら豊かな緑に囲まれたリゾート感覚あふれるホテルです。