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

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

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

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

LLM

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

Q&A

0回答

83閲覧

llama.cpp実行中におけるtensorの具体的な構造の中身を知りたいです。

salmonyukke

総合スコア3

C++

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

LLM

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

0グッド

0クリップ

投稿2024/11/07 15:07

編集2024/11/08 17:53

実現したいこと

llama.cppでモデルを読み込み、推論を実行している最中のtensorの具体的な中身の構造を知りたいです。
ソースコードに疎いこともあり、そもそも実現できるのかすらもわかりません。

前提

forループの間にtensorの状態で、演算が分岐していることは把握できました。
ただし、tensorの構造が自分から見るとブラックボックスで、具体的にはどのようになっているかがわかりません。理想は、具体的な例を目に見える形で見たいです。
構造自体は把握していて、実際の推論中にどのような型や演算方法(以下のソースコードのop部分)がtensorに格納されているのかを知りたいです。
何か知見を持っている方がいればご教授お願いします。
よろしくお願いいたします。

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

エラーメッセージ

該当のソースコード

-------tensorの型定義-----------------------------------------------------------------
struct ggml_tensor {
enum ggml_type type;

GGML_DEPRECATED(enum ggml_backend_type backend, "use the buffer type to find the storage location of the tensor"); struct ggml_backend_buffer * buffer; int64_t ne[GGML_MAX_DIMS]; // number of elements size_t nb[GGML_MAX_DIMS]; // stride in bytes: // nb[0] = ggml_type_size(type) // nb[1] = nb[0] * (ne[0] / ggml_blck_size(type)) + padding // nb[i] = nb[i-1] * ne[i-1] // compute data enum ggml_op op; // op params - allocated as int32_t for alignment int32_t op_params[GGML_MAX_OP_PARAMS / sizeof(int32_t)]; int32_t flags; struct ggml_tensor * grad; struct ggml_tensor * src[GGML_MAX_SRC]; // source tensor and offset for views struct ggml_tensor * view_src; size_t view_offs; void * data; char name[GGML_MAX_NAME]; void * extra; // extra things e.g. for ggml-cuda.cu // char padding[4]; };

----------ここまで-----------------------------------------------------

-------実際の演算を行うforループ(ggml_graph_compute_thread関数)--------------
for (int node_n = 0; node_n < cgraph->n_nodes && !tp->abort; node_n++) {
struct ggml_tensor * node = cgraph->nodes[node_n];

ggml_compute_forward(&params, node); if (state->ith == 0 && cplan->abort_callback && cplan->abort_callback(cplan->abort_callback_data)) { tp->abort = true; tp->ec = GGML_STATUS_ABORTED; } ggml_barrier(state->threadpool); }

--------ここまで---------------------------------

--------tensorの分岐----------------------------
static void ggml_compute_forward(struct ggml_compute_params * params, struct ggml_tensor * tensor) {
GGML_ASSERT(params);

if (tensor->op == GGML_OP_NONE || ggml_is_empty(tensor)) { return; } switch (tensor->op) { case GGML_OP_DUP: { ggml_compute_forward_dup(params, tensor); } break; case GGML_OP_ADD: { ggml_compute_forward_add(params, tensor); } break; case GGML_OP_ADD1: { ggml_compute_forward_add1(params, tensor); } break; case GGML_OP_ACC: { ggml_compute_forward_acc(params, tensor); } break; case GGML_OP_SUB: { ggml_compute_forward_sub(params, tensor); } break; case GGML_OP_MUL: { ggml_compute_forward_mul(params, tensor); } break;

.......(長いため省略)
----------ここまで-----------------------------

試したこと

ここに問題に対して試したことを記載してください。

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

llama.cppのgitページにはggml/src/ggml.c上に、上記の関数が見当たらない可能性があります。
自分はcloneしてすべて見えているので、必要であれば随時ソースコードを添付させていただきます。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問