null instruct jaはある程度日本語性能が高いllmを用いて、人の手を極力介さずにinstructデータを作成するプロジェクトです。
- このプロジェクトのコードを継承するコードおよびコードの実行によって得られた成果物は、オープンソースへの貢献のため、必ずオープンソースとして公開しなくてはなりません。
- このプロジェクトのコードを継承するコードおよびコードの実行によって得られた成果物は、このライセンスと同等の意義を持つライセンスを継承しなくてはなりません。
- 上二つの制限事項はtwitter(advictrius85)のDMにある程度納得できる理由を載せたうえで私が同意すれば撤廃可能(クローズにしてもよい)です。
- このコードが世間でどのように使われたかを知りたいため、可能であれば、https://github.com/neodyland/null-instruct-ja のissueに成果物が公開されたurlを載せてくださるとありがたいです!
- その他制約事項についてはMITライセンスに準じます。
- http://localhost:8080/completions にpostできる状態で任意の日本語が喋れるモデルを起動します。
- このリポジトリをクローンし、
requirements.txt
を参考に依存関係をインストールします。(RTX3000系以降のlinux意外はpip install -r requirements.txt
ではインストールできません。適宜手動インストールしてください。) venv/lib/python3.11/site-packages/unsloth/models/llama.py
にパッチを当てます。
900 logits = logits.tanh()#torch.tanh(logits, out = logits)
901 logits = logits * logit_softcapping#logits *= logit_softcapping
python gen_prompt.py --max_count_for_evol 3 --max_count_for_null 300 --evol_steps 1 --host http://localhost:8080 --type llama.cpp
を実行します。- 終わったら
python plot.py
を実行します。 result/filtered.json
に結果が出力されます。
無からプロンプトを生成する回数を指定します。この回数は最終的にほしいプロンプトの量によって変動させてください。
最終的に生成されるプロンプトは約max_count_for_null * max_count_for_evol / 5となります。
nullで生成されたpromptに対して類似するプロンプトを生成する回数を指定します。3回を強く推奨します。
プロンプトの進化回数を指定します。gemma-2の場合は一回くらいで十分だと思います。
APIが立っているホストです。openai互換であればなんでもいいです。
llama.cpp/vllm/openaiのいずれかを選択してください。
llama.cppとvllmではgrammarを利用して回答の成功率を上げます。
from ds import ds
ds.push_to_hub("<hf repo id>")
で素早くpushするためのファイルです。
無からプロンプトを生成するところまでをやってくれます。
plot_after.png
(multilingual-e5-largeによる分布確認) およびresult/filtered.json
(最終結果)を生成します。
python lora_infer.py --steps {int} --max 128
でloraモデルの検証ができます。
で読み込むためのファイルでs。
neody/null-instruct-ja
でgoogle/gemma-1.1-2b-it
をファインチューニングします。
python lora.py --resume False|True
で学習を起動します。
Elyza Tasks 100
plot.py
を大幅に進化してくれました