svjack's picture
Upload folder using huggingface_hub
13d3ba0
#include "ggml/ggml.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
struct ggml_context* make_ctx(void) {
struct ggml_init_params params = {
.mem_size = 2 * 1024 * 1024,
};
return ggml_init(params);
}
void check_tensor(struct ggml_tensor * t, float * expected_t_d, int ne0, int ne1, int ne2) {
GGML_ASSERT(t->type == GGML_TYPE_F32);
GGML_ASSERT(t->ne[0] == ne0);
GGML_ASSERT(t->ne[1] == ne1);
GGML_ASSERT(t->ne[2] == ne2);
for (int i2 = 0; i2 < ne2; ++i2) {
for (int i1 = 0; i1 < ne1; ++i1) {
for (int i0 = 0; i0 < ne0; ++i0) {
float expected = *(expected_t_d + i2 * ne1 * ne0 + i1 * ne0 + i0);
float actual = ggml_get_data_f32(t)[i2 * ne1 * ne0 + i1 * ne0 + i0];
GGML_ASSERT(expected == actual);
}
}
}
}
int main(int argc, const char** argv) {
ggml_fp16_t buf_f16[1024];
for (int i = 0; i < 1024; ++i) {
buf_f16[i] = ggml_fp32_to_fp16((float)i);
}
float expected_out[4][9] = {
{ 8.0, 9.0, 10.0, 9.0, 10.0, 11.0, 10.0, 11.0, 12.0 },
{ 2.0, 3.0, 4.0, 3.0, 4.0, 5.0, 4.0, 5.0, 6.0 },
{ 14.0, 15.0, 16.0, 15.0, 16.0, 17.0, 16.0, 17.0, 18.0 },
{ 8.0, 9.0, 10.0, 9.0, 10.0, 11.0, 10.0, 11.0, 12.0 },
};
{
struct ggml_context * ctx = make_ctx();
struct ggml_tensor * t = ggml_new_tensor_2d(ctx, GGML_TYPE_F16, 3, 3);
ggml_fp16_t* t_d = (ggml_fp16_t*)t->data;
memcpy(t_d, buf_f16, ggml_nbytes(t));
struct ggml_tensor * t_2 = ggml_new_tensor_2d(ctx, GGML_TYPE_F16, 3, 3);
ggml_fp16_t* t_d_2 = (ggml_fp16_t*)t_2->data;
memcpy(t_d_2, buf_f16 + 1, ggml_nbytes(t_2));
struct ggml_tensor * rw = ggml_get_rel_pos(ctx, t, 2, 2);
struct ggml_tensor * rh = ggml_get_rel_pos(ctx, t_2, 2, 2);
struct ggml_tensor * rw_f32 = ggml_cpy(ctx, rw, ggml_new_tensor_3d(ctx, GGML_TYPE_F32, 3, 2, 2));
struct ggml_tensor * rh_f32 = ggml_cpy(ctx, rh, ggml_new_tensor_3d(ctx, GGML_TYPE_F32, 3, 2, 2));
struct ggml_tensor * in = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 9, 4);
struct ggml_tensor * out_inplace = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 9, 4);
float * in_d = (float*)in->data;
float * out_inplace_d = (float*)out_inplace->data;
for (int i = 0; i < ggml_nelements(in); ++i) {
in_d[i] = 1.f;
out_inplace_d[i] = 1.f;
}
struct ggml_tensor * out = ggml_add_rel_pos(ctx, in, rw_f32, rh_f32);
struct ggml_cgraph gf = ggml_build_forward(out);
ggml_graph_compute_with_ctx(ctx, &gf, 1);
out_inplace = ggml_add_rel_pos_inplace(ctx, out_inplace, rw_f32, rh_f32);
struct ggml_cgraph gf_2 = ggml_build_forward(out_inplace);
ggml_graph_compute_with_ctx(ctx, &gf_2, 1);
check_tensor(out, (float*)expected_out, 9, 4, 1);
check_tensor(out_inplace, (float*)expected_out, 9, 4, 1);
}
return 0;
}