質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

LLM

LLM(大規模言語モデル)は、膨大なデータセットとディープラーニング技術により構築された言語モデル。データ量・計算量・パラメータ量の3つの要素が従来の言語モデルよりも大幅に強化され、より高精度な言語処理が可能です。

Q&A

解決済

1回答

200閲覧

llama.cppのコードの流れが分からない

salmonyukke

総合スコア3

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

LLM

LLM(大規模言語モデル)は、膨大なデータセットとディープラーニング技術により構築された言語モデル。データ量・計算量・パラメータ量の3つの要素が従来の言語モデルよりも大幅に強化され、より高精度な言語処理が可能です。

0グッド

1クリップ

投稿2024/10/28 07:02

編集2024/10/28 07:04

実現したいこと

llama.cppを実行した時に、モデルを読み込んで、回答に対しての出力を表示するまでの関数の流れが分からない。

前提

現在、LLMの研究に取り組んでいます。
ですが、大きなファイルを扱った経験が少ないため、何から取り組むべきかがいまいちわかりません。
大まかな手順でもいいので教えてほしいです。
特に、どの関数から始まり、どの関数で終了しているのか調べる方法を教えてほしいです。
よろしくお願いします。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

./llama.cpp/llama-cli -ngl 32 -m ./llama.cpp/models/llama-2-7b-chat.Q4_K_M.gguf --color -c 4096 --repeat_penalty 1.1 -n -1 -p "[INST] <<SYS>>\n How tall is Tokyo Tower? \n<<SYS>>\n{prompt}[/INST]"

以上のコマンドで実行を行っています。

また、

gprof ./llama.cpp/llama-cli -ngl 32 -m ./llama.cpp/models/llama-2-7b-chat.Q4_K_M.gguf --color -c 4096 --repeat_penalty 1.1 -n -1 -p "[INST] <<SYS>>\n How tall is Tokyo Tower? \n<<SYS>>\n{prompt}[/INST]" gmon.out

のコマンドでプロファイルも行ってみましたが、望んでいるものが手に入っている状態なのかはわかりません。
理由としては、実行時間とgprofの時間が違っていました。

ただ、gpro2dotを活用すればpdfでプロファイル結果を可視化できるのを知ったので、それはこれから試そうと思います。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ご自身でも書かれている通り「ある程度大きなコードベースを解析したことがない」ことを前提として、私なりの大きなコードベースの理解の仕方を共有しますね。
※より汎用的かつ人間の認知の仕組みに即した手法については「プログラマ脳」という優れた本がありますので、こちらを参考にされると良いと思います。

llama-cliのコードを読むと、ログの出力を制御するオプションが存在します。
https://github.com/ggerganov/llama.cpp/blob/master/common/arg.cpp#L2013-L2034

cpp

1 add_opt(common_arg( 2 {"--log-file"}, "FNAME", 3 "Log to file", 4 [](common_params &, const std::string & value) { 5 common_log_set_file(common_log_main(), value.c_str()); 6 } 7 )); 8 add_opt(common_arg( 9 {"--log-colors"}, 10 "Enable colored logging", 11 [](common_params &) { 12 common_log_set_colors(common_log_main(), true); 13 } 14 ).set_env("LLAMA_LOG_COLORS")); 15 add_opt(common_arg( 16 {"-v", "--verbose", "--log-verbose"}, 17 "Set verbosity level to infinity (i.e. log all messages, useful for debugging)", 18 [](common_params & params) { 19 params.verbosity = INT_MAX; 20 common_log_set_verbosity_thold(INT_MAX); 21 } 22 ));

--log-file--log-verboseを付与すれば、大量の内部処理のログが出力されるはずです。
このログのうち、自分にとって気になる機能(例えば、「モデルを読み込み」)についてのメッセージを見つけだしましょう。
そのメッセージをコードベースで検索すれば、そのログを出力している該当箇所が見つかります。
その前後の処理をメモを残すなり、自分なりに図示するなりして地道に読んでいけば、おおよそその機能についての理解が深まると思います。

100%理解しなくてもいいので、処理の概要が掴めたら、次の機能に進む…という繰り返しとすることで、徐々に全体像の把握と重複している関数などへの理解が深まっていくはずです。

あ、この際実行するコマンドとソースコードのバージョンは固定することを忘れないようにしてください。llamaのように開発スピードが速いものに追従しながらコードを理解をしようとするとすごい労力が必要になってしまうので、ある程度理解するまではバージョンを固定して、最新版への追従はおあずけにした方が良いです。

また、もっとざっくりの把握で良いのであれば--log-verbosityを指定して、ログ出力の詳細度を下げることも可能です。

いずれにせよ、あらゆる可能性を考慮しながらコードからのみロジックを読みこむよりは楽に処理を理解できるはずです。試してみてください。

投稿2024/10/28 17:27

編集2024/10/29 01:14
toge_

総合スコア226

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

salmonyukke

2024/10/29 04:07

丁寧にありがとうございます! 試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問