fix shape of v_diff_original
This commit is contained in:
parent
c241b500a1
commit
6a5adf3d7c
2 changed files with 11 additions and 8 deletions
|
@ -210,8 +210,9 @@ struct train_context {
|
||||||
auto & diff_tmp = v_diff_tmp[il];
|
auto & diff_tmp = v_diff_tmp[il];
|
||||||
int n_elem = diff_tmp.size() / sizeof(float);
|
int n_elem = diff_tmp.size() / sizeof(float);
|
||||||
int n_rows = n_elem / n_embd;
|
int n_rows = n_elem / n_embd;
|
||||||
struct ggml_tensor * diff = ggml_new_tensor_2d(ctx_ggml, GGML_TYPE_F32, n_embd, n_rows);
|
struct ggml_tensor * diff = ggml_new_tensor_2d(ctx_ggml, GGML_TYPE_F32, n_rows, n_embd);
|
||||||
ggml_set_name(diff, (std::string("diff_") + std::to_string(il)).c_str());
|
ggml_set_name(diff, (std::string("diff_") + std::to_string(il)).c_str());
|
||||||
|
// TODO: IMPORTANT!! transpose diff
|
||||||
diff->data = diff_tmp.data();
|
diff->data = diff_tmp.data();
|
||||||
v_diff.push_back(diff);
|
v_diff.push_back(diff);
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,10 +72,10 @@ void load_pca_model(pca_model & model, struct ggml_tensor * input) {
|
||||||
};
|
};
|
||||||
model.ctx = ggml_init(params);
|
model.ctx = ggml_init(params);
|
||||||
|
|
||||||
auto n_embd = input->ne[0];
|
auto n_embd = input->ne[1];
|
||||||
auto n_samples = input->ne[1];
|
auto n_samples = input->ne[0];
|
||||||
|
|
||||||
model.v_diff_original = ggml_new_tensor_2d(model.ctx, GGML_TYPE_F32, n_embd, n_samples);
|
model.v_diff_original = ggml_new_tensor_2d(model.ctx, GGML_TYPE_F32, n_samples, n_embd);
|
||||||
model.square = ggml_new_tensor_2d(model.ctx, GGML_TYPE_F32, n_embd, n_embd);
|
model.square = ggml_new_tensor_2d(model.ctx, GGML_TYPE_F32, n_embd, n_embd);
|
||||||
model.eigenvector = ggml_new_tensor_1d(model.ctx, GGML_TYPE_F32, n_embd);
|
model.eigenvector = ggml_new_tensor_1d(model.ctx, GGML_TYPE_F32, n_embd);
|
||||||
|
|
||||||
|
@ -117,9 +117,11 @@ static struct ggml_cgraph * build_graph_piter(
|
||||||
struct ggml_cgraph * gf = ggml_new_graph(ctx0);
|
struct ggml_cgraph * gf = ggml_new_graph(ctx0);
|
||||||
|
|
||||||
// turn v_diff_original into square matrix if needed
|
// turn v_diff_original into square matrix if needed
|
||||||
|
struct ggml_tensor * square;
|
||||||
if (calc_square) {
|
if (calc_square) {
|
||||||
//struct ggml_tensor * v_diff_transposed = ggml_transpose(ctx0, model.v_diff_original);
|
//struct ggml_tensor * v_diff_transposed = ggml_transpose(ctx0, model.v_diff_original);
|
||||||
struct ggml_tensor * square = ggml_mul_mat(ctx0, model.v_diff_original, model.v_diff_original);
|
print_debug_tensor(model.v_diff_original);
|
||||||
|
square = ggml_mul_mat(ctx0, model.v_diff_original, model.v_diff_original);
|
||||||
ggml_set_name(square, "square");
|
ggml_set_name(square, "square");
|
||||||
//model.square = ggml_scale_inplace(ctx0, model.square, 0.0);
|
//model.square = ggml_scale_inplace(ctx0, model.square, 0.0);
|
||||||
}
|
}
|
||||||
|
@ -128,7 +130,7 @@ static struct ggml_cgraph * build_graph_piter(
|
||||||
|
|
||||||
for (int i = 0; i < nb_iterations; ++i) {
|
for (int i = 0; i < nb_iterations; ++i) {
|
||||||
// b_tensor = square * eigenvector^T
|
// b_tensor = square * eigenvector^T
|
||||||
b_tensor = ggml_mul_mat(ctx0, model.square, model.eigenvector);
|
b_tensor = ggml_mul_mat(ctx0, square, model.eigenvector);
|
||||||
ggml_set_name(b_tensor, "b_tensor");
|
ggml_set_name(b_tensor, "b_tensor");
|
||||||
|
|
||||||
// normalize
|
// normalize
|
||||||
|
@ -209,7 +211,6 @@ static void power_iteration(
|
||||||
}
|
}
|
||||||
allocr = ggml_gallocr_new(ggml_backend_get_default_buffer_type(model.backend));
|
allocr = ggml_gallocr_new(ggml_backend_get_default_buffer_type(model.backend));
|
||||||
struct ggml_cgraph * gf = build_graph_piter(model, iter == 0);
|
struct ggml_cgraph * gf = build_graph_piter(model, iter == 0);
|
||||||
printf("kkk\n");
|
|
||||||
ggml_graph_dump_dot(gf, nullptr, "/tmp/_cgraph.dot");
|
ggml_graph_dump_dot(gf, nullptr, "/tmp/_cgraph.dot");
|
||||||
struct ggml_tensor * distance = compute_piter(model, gf, allocr, n_threads);
|
struct ggml_tensor * distance = compute_piter(model, gf, allocr, n_threads);
|
||||||
|
|
||||||
|
@ -236,6 +237,7 @@ static void run_pca(
|
||||||
int n_embd = v_input[0]->ne[0]; // shape of v_input[0]: [n_embd, m]
|
int n_embd = v_input[0]->ne[0]; // shape of v_input[0]: [n_embd, m]
|
||||||
int n_threads = 8; // TODO: change me
|
int n_threads = 8; // TODO: change me
|
||||||
for (size_t il = 0; il < v_input.size(); ++il) {
|
for (size_t il = 0; il < v_input.size(); ++il) {
|
||||||
|
print_debug_tensor(v_input[il]);
|
||||||
// prepare output vector
|
// prepare output vector
|
||||||
struct ggml_tensor * ctrl_out = v_output[il];
|
struct ggml_tensor * ctrl_out = v_output[il];
|
||||||
auto name = std::string("direction.") + std::to_string(il + 1);
|
auto name = std::string("direction.") + std::to_string(il + 1);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue