モデル概要
モデル特徴
モデル能力
使用事例
🚀 MERAK-7B-V2 GGML
このプロジェクトは、MERAK-7B-V2 のGGML形式のモデルファイルを提供しています。GGMLファイルは、llama.cpp やそれをサポートするライブラリ、UIを使ったCPU+GPU推論に対応しています。
🚀 クイックスタート
このGGML形式のモデルファイルは、様々なライブラリやUIで使用できます。以下にいくつかの例を示します。
- KoboldCpp:GPUアクセラレーションを備えた強力なGGMLウェブUIで、ストーリーテリングに特に適しています。
- LoLLMS Web UI:c_transformersバックエンドを通じてGPUアクセラレーションをサポートする優れたウェブUIです。
- LM Studio:完全な機能を備えたローカルGUIで、macOSでは完全なGPUアクセラレーションをサポートします。Windowsでも使用できますが、GPUアクセラレーションはサポートされていません。
- text-generation-webui:最も人気のあるウェブUIです。llama.cppバックエンドを通じてGPUアクセラレーションを有効にするには、追加の手順が必要です。
- ctransformers:LangChainサポートとOpenAI互換のAIサーバーを備えたPythonライブラリです。
- llama-cpp-python:OpenAI互換のAPIサーバーを備えたPythonライブラリです。
✨ 主な機能
- 多言語対応:インドネシア語や英語などの複数の言語に対応しています。
- 低VRAMでの実行:QLoRAを利用することで、16GBのVRAMで実行可能です。
- 多様な量子化方法:様々な量子化方法をサポートしており、メモリ使用量と精度のバランスを調整できます。
📦 インストール
必要なライブラリのインストール
システムにCUDAドライバー、Python 3.10、PyTorch 2がインストールされていることを確認してから、以下のコマンドで必要なライブラリをインストールしてください。
pip install bitsandbytes==0.39.1
pip install transformers==4.31.0
pip install peft==0.4.0
pip install accelerate==0.20.3
pip install einops==0.6.1 scipy sentencepiece datasets
💻 使用例
基本的な使用法
import torch
from transformers import AutoTokenizer, AutoConfig, AutoModelForCausalLM, BitsAndBytesConfig, LlamaTokenizer
from peft import PeftModel, PeftConfig
model_id = "Ichsan2895/Merak-7B-v2"
config = AutoConfig.from_pretrained(model_id)
BNB_CONFIG = BitsAndBytesConfig(load_in_4bit=True,
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
)
model = AutoModelForCausalLM.from_pretrained(model_id,
quantization_config=BNB_CONFIG,
device_map="auto",
trust_remote_code=True)
tokenizer = LlamaTokenizer.from_pretrained(model_id)
def generate_response(question: str) -> str:
prompt = f"<|prompt|>{question}\n<|answer|>".strip()
encoding = tokenizer(prompt, return_tensors='pt').to("cuda")
with torch.inference_mode():
outputs = model.generate(input_ids=encoding.input_ids,
attention_mask=encoding.attention_mask,
eos_token_id=tokenizer.pad_token_id,
do_sample=False,
num_beams=2,
temperature=0.3,
repetition_penalty=1.2,
max_length=200)
response = tokenizer.decode(outputs[0], skip_special_tokes=True)
assistant_start = "<|answer|>"
response_start = response.find(assistant_start)
return response[response_start + len(assistant_start) :].strip()
prompt = "Siapa penulis naskah proklamasi kemerdekaan Indonesia?"
print(generate_response(prompt))
高度な使用法
BitsandBytes 4-bit量子化を使用せず、より高いVRAMを使用する場合の例です。
import torch
from transformers import AutoTokenizer, AutoConfig, AutoModelForCausalLM, BitsAndBytesConfig, LlamaTokenizer
from peft import PeftModel, PeftConfig
model_id = "Ichsan2895/Merak-7B-v2"
config = AutoConfig.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id,
device_map="auto",
trust_remote_code=True)
tokenizer = LlamaTokenizer.from_pretrained(model_id)
def generate_response(question: str) -> str:
prompt = f"<|prompt|>{question}\n<|answer|>".strip()
encoding = tokenizer(prompt, return_tensors='pt').to("cuda")
with torch.inference_mode():
outputs = model.generate(input_ids=encoding.input_ids,
attention_mask=encoding.attention_mask,
eos_token_id=tokenizer.pad_token_id,
do_sample=False,
num_beams=2,
temperature=0.3,
repetition_penalty=1.2,
max_length=200)
response = tokenizer.decode(outputs[0], skip_special_tokes=True)
assistant_start = "<|answer|>"
response_start = response.find(assistant_start)
return response[response_start + len(assistant_start) :].strip()
prompt = "Siapa penulis naskah proklamasi kemerdekaan Indonesia?"
print(generate_response(prompt))
📚 ドキュメント
互換性
元のllama.cpp量子化方法: q4_0, q4_1, q5_0, q5_1, q8_0
これらの方法は、5月下旬以降にリリースされたすべてのUI、ツール、ライブラリと互換性があることが保証されています。ただし、新しいk-quant方法によって大きく置き換えられるため、近い将来廃止される可能性があります。
新しいk-quant方法: q2_K, q3_K_S, q3_K_M, q3_K_L, q4_K_S, q4_K_M, q5_K_S, q6_K
これらの新しい量子化方法は、6月6日のコミット 2d43387
以降のllama.cppと互換性があります。また、最近のtext-generation-webui、KoboldCpp、llama-cpp-python、ctransformers、rustformersなどの多くのツールやライブラリとも互換性があります。他のツールやライブラリとの互換性については、それぞれのドキュメントを確認してください。
新しいk-quant方法の説明
詳細を表示するにはクリック
利用可能な新しい方法は以下の通りです。
- GGML_TYPE_Q2_K - 16ブロックを含むスーパーブロックでの「タイプ1」の2ビット量子化。各ブロックには16の重みがあります。ブロックのスケールと最小値は4ビットで量子化されます。これにより、1重みあたり実効的に2.5625ビット(bpw)が使用されます。
- GGML_TYPE_Q3_K - 16ブロックを含むスーパーブロックでの「タイプ0」の3ビット量子化。各ブロックには16の重みがあります。スケールは6ビットで量子化されます。これにより、3.4375bpwが使用されます。
- GGML_TYPE_Q4_K - 8ブロックを含むスーパーブロックでの「タイプ1」の4ビット量子化。各ブロックには32の重みがあります。スケールと最小値は6ビットで量子化されます。これにより、4.5bpwが使用されます。
- GGML_TYPE_Q5_K - 「タイプ1」の5ビット量子化。GGML_TYPE_Q4_Kと同じスーパーブロック構造で、5.5bpwになります。
- GGML_TYPE_Q6_K - 「タイプ0」の6ビット量子化。16ブロックを含むスーパーブロックで、各ブロックには16の重みがあります。スケールは8ビットで量子化されます。これにより、6.5625bpwが使用されます。
- GGML_TYPE_Q8_K - 「タイプ0」の8ビット量子化。中間結果の量子化にのみ使用されます。既存のQ8_0との違いは、ブロックサイズが256であることです。この量子化タイプでは、すべての2-6ビットのドット積が実装されています。
以下の提供ファイル表を参照して、どのファイルがどの方法を使用しているかを確認してください。
提供されるファイル
名前 | 量子化方法 | ビット数 | 使用ケース |
---|---|---|---|
Merak-7B-v2.ggmlv3.q2_K.bin | q2_K | 2 | 新しいk-quant方法。attention.vwとfeed_forward.w2テンソルにGGML_TYPE_Q4_Kを使用し、その他のテンソルにGGML_TYPE_Q2_Kを使用します。 |
Merak-7B-v2.ggmlv3.q3_K_L.bin | q3_K_L | 3 | 新しいk-quant方法。attention.wv、attention.wo、およびfeed_forward.w2テンソルにGGML_TYPE_Q5_Kを使用し、それ以外のテンソルにGGML_TYPE_Q3_Kを使用します。 |
Merak-7B-v2.ggmlv3.q3_K_M.bin | q3_K_M | 3 | 新しいk-quant方法。attention.wv、attention.wo、およびfeed_forward.w2テンソルにGGML_TYPE_Q4_Kを使用し、それ以外のテンソルにGGML_TYPE_Q3_Kを使用します。 |
Merak-7B-v2.ggmlv3.q3_K_S.bin | q3_K_S | 3 | 新しいk-quant方法。すべてのテンソルにGGML_TYPE_Q3_Kを使用します。 |
Merak-7B-v2.ggmlv3.q4_0.bin | q4_0 | 4 | 元の量子化方法、4ビット。 |
Merak-7B-v2.ggmlv3.q4_1.bin | q4_1 | 4 | 元の量子化方法、4ビット。q4_0よりも精度が高いが、q5_0ほど高くはありません。ただし、q5モデルよりも推論が速いです。 |
Merak-7B-v2.ggmlv3.q4_K_M.bin | q4_K_M | 4 | 新しいk-quant方法。attention.wvとfeed_forward.w2テンソルの半分にGGML_TYPE_Q6_Kを使用し、それ以外のテンソルにGGML_TYPE_Q4_Kを使用します。 |
Merak-7B-v2.ggmlv3.q4_K_S.bin | q4_K_S | 4 | 新しいk-quant方法。すべてのテンソルにGGML_TYPE_Q4_Kを使用します。 |
Merak-7B-v2.ggmlv3.q5_0.bin | q5_0 | 5 | 元の量子化方法、5ビット。精度が高く、リソース使用量が多く、推論が遅いです。 |
Merak-7B-v2.ggmlv3.q5_1.bin | q5_1 | 5 | 元の量子化方法、5ビット。さらに精度が高く、リソース使用量が多く、推論が遅いです。 |
Merak-7B-v2.ggmlv3.q5_K_M.bin | q5_K_M | 5 | 新しいk-quant方法。attention.wvとfeed_forward.w2テンソルの半分にGGML_TYPE_Q6_Kを使用し、それ以外のテンソルにGGML_TYPE_Q5_Kを使用します。 |
Merak-7B-v2.ggmlv3.q5_K_S.bin | q5_K_S | 5 | 新しいk-quant方法。すべてのテンソルにGGML_TYPE_Q5_Kを使用します。 |
Merak-7B-v2.ggmlv3.q6_K.bin | q6_K | 6 | 新しいk-quant方法。すべてのテンソルにGGML_TYPE_Q8_Kを使用します - 6ビット量子化。 |
lMerak-7B-v2.ggmlv3.q8_0.bin | q8_0 | 8 | 元の量子化方法、8ビット。float16とほとんど区別がつきません。リソース使用量が多く、速度が遅いです。ほとんどのユーザーにはおすすめしません。 |
text-generation-webuiでの実行方法
詳細な手順はこちらを参照してください:text-generation-webui/docs/llama.cpp-models.md。
🔧 技術詳細
Merak-7Bは、インドネシア語の大規模言語モデルです。このモデルは、Meta Llama-2-7B-Chat-HFをベースに、事前にクリーニングしたいくつかのインドネシア語のWikipedia記事を使用してファインチューニングされています。
QLoRA(QLora: Efficient Finetuning of Quantized LLMs)を利用することで、Merak-7Bは16GBのVRAMで実行可能です。また、Creative Commons-By Attribution-Share Alike-Non Commercial (CC-BY-SA-NC 4.0)のライセンスの下で提供されており、AI愛好者や研究者にとって便利なモデルです。
📄 ライセンス
このモデルは、Creative Commons-By Attribution-Share Alike-Non Commercial (CC-BY-SA-NC 4.0)のライセンスの下で提供されています。
変更履歴
v1 = 最初のMerak-7Bモデル。約200kのID Wikipedia記事を選択してクリーニングしました。
v2 = 最初のMerak-7Bモデルのファインチューニング版。質問のプロンプトスタイルを変更した同じID Wikipedia記事を使用して再度ファインチューニングしました。
引用
@Paper{arXiv,
author = {Touvron, et al},
title = {Llama 2: Open Foundation and Fine-Tuned Chat Models},
journal = {arXiv preprint arXiv:2307.09288},
year = {2023}
}
@ONLINE{wikidump,
author = "Wikimedia Foundation",
title = "Wikimedia Downloads",
url = "https://dumps.wikimedia.org"
}
@inproceedings{wolf-etal-2020-transformers,
title = "Transformers: State-of-the-Art Natural Language Processing",
author = "Thomas Wolf and Lysandre Debut and Victor Sanh and Julien Chaumond and Clement Delangue and Anthony Moi and Pierric Cistac and Tim Rault and Rémi Louf and Morgan Funtowicz and Joe Davison and Sam Shleifer and Patrick von Platen and Clara Ma and Yacine Jernite and Julien Plu and Canwen Xu and Teven Le Scao and Sylvain Gugger and Mariama Drame and Quentin Lhoest and Alexander M. Rush",
booktitle = "Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing: System Demonstrations",
month = oct,
year = "2020",
address = "Online",
publisher = "Association for Computational Linguistics",
url = "https://www.aclweb.org/anthology/2020.emnlp-demos.6",
pages = "38--45"
}
@article{dettmers2023qlora,
title = {QLoRA: Efficient Finetuning of Quantized LLMs},
author = {Dettmers, Tim and Pagnoni, Artidoro and Holtzman, Ari and Zettlemoyer, Luke},
journal = {arXiv preprint arXiv:2305.14314},
year = {2023}
}



