Nothing
# Tests for miscellaneous operations not covered elsewhere
# ============================================================================
# ggml_timestep_embedding
# ============================================================================
test_that("ggml_timestep_embedding works", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
timesteps <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 2)
ggml_set_f32(timesteps, c(1.0, 10.0))
ggml_set_input(timesteps)
r <- ggml_timestep_embedding(ctx, timesteps, dim = 8L)
ggml_set_output(r)
backend <- ggml_backend_cpu_init()
on.exit(ggml_backend_free(backend), add = TRUE)
ggml_backend_cpu_set_n_threads(backend, 2L)
graph <- ggml_build_forward_expand(ctx, r)
ggml_backend_graph_compute(backend, graph)
result <- ggml_get_f32(r)
expect_length(result, 16) # 8 dim * 2 timesteps
expect_true(all(is.finite(result)))
})
# ============================================================================
# ggml_repeat_back
# ============================================================================
test_that("ggml_repeat_back works", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
a <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 2)
ggml_set_f32(a, c(0, 0))
ggml_set_input(a)
b <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 4)
ggml_set_f32(b, c(1, 2, 3, 4))
ggml_set_input(b)
r <- ggml_repeat_back(ctx, b, a)
ggml_set_output(r)
backend <- ggml_backend_cpu_init()
on.exit(ggml_backend_free(backend), add = TRUE)
ggml_backend_cpu_set_n_threads(backend, 2L)
graph <- ggml_build_forward_expand(ctx, r)
ggml_backend_graph_compute(backend, graph)
result <- ggml_get_f32(r)
expect_length(result, 2)
expect_equal(result, c(4, 6), tolerance = 1e-5)
})
# ============================================================================
# ggml_flash_attn_back
# ============================================================================
test_that("ggml_flash_attn_back returns externalptr", {
ctx <- ggml_init(4 * 1024 * 1024)
on.exit(ggml_free(ctx))
d <- 8L
n <- 4L
q <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, d, n)
k <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, d, n)
v <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, d, n)
ggml_set_f32(q, rnorm(d * n))
ggml_set_f32(k, rnorm(d * n))
ggml_set_f32(v, rnorm(d * n))
ggml_set_input(q)
ggml_set_input(k)
ggml_set_input(v)
skip("ggml_flash_attn_back not implemented (TODO in ggml.c)")
})
# ============================================================================
# ggml_rms_norm_back
# ============================================================================
test_that("ggml_rms_norm_back computes gradient", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
a <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 4)
b <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 4)
ggml_set_f32(a, c(1, 2, 3, 4))
ggml_set_f32(b, c(1, 1, 1, 1))
ggml_set_input(a)
ggml_set_input(b)
r <- ggml_rms_norm_back(ctx, a, b, 1e-5)
ggml_set_output(r)
backend <- ggml_backend_cpu_init()
on.exit(ggml_backend_free(backend), add = TRUE)
ggml_backend_cpu_set_n_threads(backend, 2L)
graph <- ggml_build_forward_expand(ctx, r)
ggml_backend_graph_compute(backend, graph)
result <- ggml_get_f32(r)
expect_length(result, 4)
expect_true(all(is.finite(result)))
})
# ============================================================================
# ggml_silu_back
# ============================================================================
test_that("ggml_silu_back computes gradient", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
a <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 4)
b <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 4)
ggml_set_f32(a, c(0, 1, -1, 2))
ggml_set_f32(b, c(1, 1, 1, 1))
ggml_set_input(a)
ggml_set_input(b)
# ggml_silu_back(ctx, grad, x): first arg is upstream gradient, second is input
r <- ggml_silu_back(ctx, b, a)
ggml_set_output(r)
backend <- ggml_backend_cpu_init()
on.exit(ggml_backend_free(backend), add = TRUE)
ggml_backend_cpu_set_n_threads(backend, 2L)
graph <- ggml_build_forward_expand(ctx, r)
ggml_backend_graph_compute(backend, graph)
result <- ggml_get_f32(r)
expect_length(result, 4)
expect_true(all(is.finite(result)))
expect_equal(result[1], 0.5, tolerance = 1e-4)
})
# ============================================================================
# ggml_group_norm_inplace
# ============================================================================
test_that("ggml_group_norm_inplace works", {
ctx <- ggml_init(1024 * 1024)
on.exit(ggml_free(ctx))
a <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 4, 2)
ggml_set_f32(a, c(1, 2, 3, 4, 5, 6, 7, 8))
ggml_set_input(a)
r <- ggml_group_norm_inplace(ctx, a, 2L)
ggml_set_output(r)
backend <- ggml_backend_cpu_init()
on.exit(ggml_backend_free(backend), add = TRUE)
ggml_backend_cpu_set_n_threads(backend, 2L)
graph <- ggml_build_forward_expand(ctx, r)
ggml_backend_graph_compute(backend, graph)
result <- ggml_get_f32(r)
expect_length(result, 8)
expect_true(all(is.finite(result)))
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.