← Back to C-Kernel-Engine Docs Doxygen Source Documentation
ckernel_ir_v2.h File Reference
#include "ckernel_ir.h"
#include "ckernel_kernel_specs.h"
#include <stdint.h>

Go to the source code of this file.

Data Structures

struct  CKIRV2Binding
 
struct  CKIRV2Buffer
 
struct  CKIRV2Graph
 
struct  CKIRV2Node
 

Macros

#define CK_IR_V2_MAX_BINDINGS   24
 
#define CK_IR_V2_MAX_DIMS   4
 
#define CK_IR_V2_MAX_INPUTS   8
 
#define CK_IR_V2_MAX_OUTPUTS   4
 

Enumerations

enum  CKIRV2NodeFlags { CK_IR_V2_NODE_NONE = 0 , CK_IR_V2_NODE_FUSED = 1 << 0 , CK_IR_V2_NODE_INFERENCE_ONLY = 1 << 1 }
 

Functions

int ck_ir_v2_apply_meta (const char *path, CKIRV2Graph *graph)
 
int ck_ir_v2_build_decoder (const CKModelConfig *cfg, CKIRV2Graph *graph)
 
int ck_ir_v2_build_decoder_backward (const CKIRV2Graph *forward, CKIRV2Graph *backward)
 
void ck_ir_v2_free (CKIRV2Graph *graph)
 
int ck_ir_v2_parse_json (const char *path, CKIRV2Graph *graph)
 
int ck_ir_v2_serialize_json (const CKIRV2Graph *graph, const char *path)
 
int ck_ir_v2_serialize_json_with_plan (const CKIRV2Graph *graph, const struct CKMemPlan *plan, const char *mode, int tokens_override, int base_context_window, const char *path)
 

Macro Definition Documentation

◆ CK_IR_V2_MAX_BINDINGS

#define CK_IR_V2_MAX_BINDINGS   24

Definition at line 16 of file ckernel_ir_v2.h.

◆ CK_IR_V2_MAX_DIMS

#define CK_IR_V2_MAX_DIMS   4

Definition at line 13 of file ckernel_ir_v2.h.

◆ CK_IR_V2_MAX_INPUTS

#define CK_IR_V2_MAX_INPUTS   8

Definition at line 14 of file ckernel_ir_v2.h.

◆ CK_IR_V2_MAX_OUTPUTS

#define CK_IR_V2_MAX_OUTPUTS   4

Definition at line 15 of file ckernel_ir_v2.h.

Enumeration Type Documentation

◆ CKIRV2NodeFlags

Enumerator
CK_IR_V2_NODE_NONE 
CK_IR_V2_NODE_FUSED 
CK_IR_V2_NODE_INFERENCE_ONLY 

Definition at line 18 of file ckernel_ir_v2.h.

18  {
20  CK_IR_V2_NODE_FUSED = 1 << 0,
CKIRV2NodeFlags
Definition: ckernel_ir_v2.h:18
@ CK_IR_V2_NODE_FUSED
Definition: ckernel_ir_v2.h:20
@ CK_IR_V2_NODE_INFERENCE_ONLY
Definition: ckernel_ir_v2.h:21
@ CK_IR_V2_NODE_NONE
Definition: ckernel_ir_v2.h:19

Function Documentation

◆ ck_ir_v2_apply_meta()

int ck_ir_v2_apply_meta ( const char *  path,
CKIRV2Graph graph 
)

Definition at line 220 of file ckernel_ir_v2_builder.c.

221 {
222  if (!path || !graph) {
223  return -1;
224  }
225  FILE *f = fopen(path, "rb");
226  if (!f) {
227  perror("ck_ir_v2_apply_meta: fopen");
228  return -1;
229  }
230  if (fseek(f, 0, SEEK_END) != 0) {
231  fclose(f);
232  return -1;
233  }
234  long len = ftell(f);
235  if (len < 0) {
236  fclose(f);
237  return -1;
238  }
239  if (fseek(f, 0, SEEK_SET) != 0) {
240  fclose(f);
241  return -1;
242  }
243  char *buf = (char *)malloc((size_t)len + 1);
244  if (!buf) {
245  fclose(f);
246  return -1;
247  }
248  size_t nread = fread(buf, 1, (size_t)len, f);
249  fclose(f);
250  buf[nread] = '\0';
251  const char *end = buf + nread;
252 
253  int val = 0;
254  if (ck_ir_v2_parse_bool(buf, "\"has_pos_emb\"", end, &val) == 0) {
255  graph->has_pos_emb = val ? 1 : 0;
256  }
257  if (ck_ir_v2_parse_bool(buf, "\"tie_word_embeddings\"", end, &val) == 0) {
258  graph->tie_word_embeddings = val ? 1 : 0;
259  if (graph->tie_word_embeddings == 0) {
260  int idx = ck_ir_v2_find_buffer_index(graph, "lm_head_weight");
261  if (idx >= 0) {
262  free(graph->buffers[idx].alias_of);
263  graph->buffers[idx].alias_of = NULL;
264  }
265  } else {
266  int idx = ck_ir_v2_find_buffer_index(graph, "lm_head_weight");
267  if (idx >= 0) {
268  free(graph->buffers[idx].alias_of);
269  graph->buffers[idx].alias_of = ck_ir_v2_strdup("token_emb");
270  }
271  }
272  }
273  if (ck_ir_v2_parse_bool(buf, "\"fused_qkv\"", end, &val) == 0) {
274  graph->fused_qkv = val ? 1 : 0;
275  }
276  if (ck_ir_v2_parse_bool(buf, "\"gated_mlp\"", end, &val) == 0) {
277  graph->gated_mlp = val ? 1 : 0;
278  }
279  (void)ck_ir_v2_apply_weight_dtypes(buf, end, graph);
280 
281  free(buf);
282  return 0;
283 }
static char * ck_ir_v2_strdup(const char *s)
static int ck_ir_v2_apply_weight_dtypes(const char *json, const char *end, CKIRV2Graph *graph)
static int ck_ir_v2_parse_bool(const char *json, const char *key, const char *end, int *out)
static int ck_ir_v2_find_buffer_index(const CKIRV2Graph *graph, const char *name)
char * alias_of
Definition: ckernel_ir_v2.h:31
int tie_word_embeddings
Definition: ckernel_ir_v2.h:58
CKIRV2Buffer * buffers
Definition: ckernel_ir_v2.h:62
uint32_t end
Definition: utf8.c:215

References CKIRV2Buffer::alias_of, CKIRV2Graph::buffers, ck_ir_v2_apply_weight_dtypes(), ck_ir_v2_find_buffer_index(), ck_ir_v2_parse_bool(), ck_ir_v2_strdup(), end, CKIRV2Graph::fused_qkv, CKIRV2Graph::gated_mlp, CKIRV2Graph::has_pos_emb, and CKIRV2Graph::tie_word_embeddings.

Referenced by main().

◆ ck_ir_v2_build_decoder()

int ck_ir_v2_build_decoder ( const CKModelConfig cfg,
CKIRV2Graph graph 
)

Definition at line 285 of file ckernel_ir_v2_builder.c.

286 {
287  if (!cfg || !graph) {
288  return -1;
289  }
290  memset(graph, 0, sizeof(*graph));
291  graph->config = *cfg;
292  graph->has_pos_emb = 1;
293  graph->tie_word_embeddings = -1;
294  graph->fused_qkv = -1;
295  graph->gated_mlp = -1;
296 
297  graph->num_buffers = (int)ck_decoder_buffer_count;
298  graph->buffers = (CKIRV2Buffer *)calloc((size_t)graph->num_buffers, sizeof(CKIRV2Buffer));
299  if (!graph->buffers) {
300  return -1;
301  }
302  for (int i = 0; i < graph->num_buffers; ++i) {
303  if (ck_ir_v2_copy_buffer_spec(&ck_decoder_buffers[i], &graph->buffers[i]) != 0) {
304  ck_ir_v2_free(graph);
305  return -1;
306  }
307  if (graph->buffers[i].name && strcmp(graph->buffers[i].name, "pos_emb") == 0) {
308  free(graph->buffers[i].condition);
309  graph->buffers[i].condition = ck_ir_v2_strdup("has_pos_emb");
310  }
311  }
312 
313  int plan_count = (int)ck_decoder_forward_plan_v2_count;
314  graph->num_nodes = cfg->num_layers * plan_count;
315  graph->nodes = (CKIRV2Node *)calloc((size_t)graph->num_nodes, sizeof(CKIRV2Node));
316  if (!graph->nodes) {
317  ck_ir_v2_free(graph);
318  return -1;
319  }
320 
321  int idx = 0;
322  for (int layer = 0; layer < cfg->num_layers; ++layer) {
323  for (int p = 0; p < plan_count; ++p) {
324  const CKPlanStepV2 *step = &ck_decoder_forward_plan_v2[p];
325  const CKKernelSpec *spec = ck_ir_v2_find_kernel_spec(step->kernel);
326  CKDataType dtype = spec ? spec->default_dtype : CK_DT_FP32;
327  const char *impl = ck_ir_v2_select_kernel(spec, dtype, 0);
328  CKIRV2Node *node = &graph->nodes[idx++];
329  node->layer = (uint16_t)layer;
330  node->op = ck_ir_v2_strdup(step->kernel);
331  node->kernel = ck_ir_v2_strdup(impl ? impl : step->kernel);
332  node->kernel_dtype = dtype;
333  node->condition = ck_ir_v2_strdup(step->condition);
334  node->flags = 0;
335  node->n_bindings = 0;
336  if (step->bindings && step->num_bindings > 0) {
337  int limit = (int)step->num_bindings;
338  if (limit > CK_IR_V2_MAX_BINDINGS) {
339  limit = CK_IR_V2_MAX_BINDINGS;
340  }
341  for (int b = 0; b < limit; ++b) {
342  const CKPlanBinding *binding = &step->bindings[b];
343  node->bindings[node->n_bindings].arg = ck_ir_v2_strdup(binding->arg);
344  node->bindings[node->n_bindings].buffer =
345  ck_ir_v2_find_buffer_index(graph, binding->buffer);
346  node->n_bindings++;
347  }
348  }
349  node->n_inputs = 0;
350  node->n_outputs = 0;
351  }
352  }
353  return 0;
354 }
CKDataType
Supported data types in C-Kernel-Engine.
Definition: ckernel_dtype.h:27
@ CK_DT_FP32
Definition: ckernel_dtype.h:29
#define CK_IR_V2_MAX_BINDINGS
Definition: ckernel_ir_v2.h:16
void ck_ir_v2_free(CKIRV2Graph *graph)
Definition: ckernel_ir_v2.c:34
static int ck_ir_v2_copy_buffer_spec(const CKBufferSpec *spec, CKIRV2Buffer *out)
static const char * ck_ir_v2_select_kernel(const CKKernelSpec *spec, CKDataType dtype, int backward)
static const CKKernelSpec * ck_ir_v2_find_kernel_spec(const char *name)
const CKPlanStepV2 ck_decoder_forward_plan_v2[]
const size_t ck_decoder_forward_plan_v2_count
const CKBufferSpec ck_decoder_buffers[]
const size_t ck_decoder_buffer_count
int32_t buffer
Definition: ckernel_ir_v2.h:37
char * condition
Definition: ckernel_ir_v2.h:32
CKModelConfig config
Definition: ckernel_ir_v2.h:56
CKIRV2Node * nodes
Definition: ckernel_ir_v2.h:64
uint8_t n_bindings
Definition: ckernel_ir_v2.h:48
char * condition
Definition: ckernel_ir_v2.h:44
uint16_t layer
Definition: ckernel_ir_v2.h:45
uint8_t flags
Definition: ckernel_ir_v2.h:46
CKIRV2Binding bindings[24]
Definition: ckernel_ir_v2.h:47
CKDataType kernel_dtype
Definition: ckernel_ir_v2.h:43
uint8_t n_outputs
Definition: ckernel_ir_v2.h:52
char * kernel
Definition: ckernel_ir_v2.h:42
uint8_t n_inputs
Definition: ckernel_ir_v2.h:50
CKDataType default_dtype
const char * buffer
const char * kernel
const char * condition
const CKPlanBinding * bindings

References CKIRV2Binding::arg, CKPlanBinding::arg, CKIRV2Node::bindings, CKPlanStepV2::bindings, CKIRV2Binding::buffer, CKPlanBinding::buffer, CKIRV2Graph::buffers, ck_decoder_buffer_count, ck_decoder_buffers, ck_decoder_forward_plan_v2, ck_decoder_forward_plan_v2_count, CK_DT_FP32, ck_ir_v2_copy_buffer_spec(), ck_ir_v2_find_buffer_index(), ck_ir_v2_find_kernel_spec(), ck_ir_v2_free(), CK_IR_V2_MAX_BINDINGS, ck_ir_v2_select_kernel(), ck_ir_v2_strdup(), CKIRV2Buffer::condition, CKIRV2Node::condition, CKPlanStepV2::condition, CKIRV2Graph::config, CKKernelSpec::default_dtype, CKIRV2Node::flags, CKIRV2Graph::fused_qkv, CKIRV2Graph::gated_mlp, CKIRV2Graph::has_pos_emb, CKIRV2Node::kernel, CKPlanStepV2::kernel, CKIRV2Node::kernel_dtype, CKIRV2Node::layer, CKIRV2Node::n_bindings, CKIRV2Node::n_inputs, CKIRV2Node::n_outputs, CKIRV2Buffer::name, CKIRV2Graph::nodes, CKPlanStepV2::num_bindings, CKIRV2Graph::num_buffers, CKModelConfig::num_layers, CKIRV2Graph::num_nodes, CKIRV2Node::op, and CKIRV2Graph::tie_word_embeddings.

Referenced by main().

◆ ck_ir_v2_build_decoder_backward()

int ck_ir_v2_build_decoder_backward ( const CKIRV2Graph forward,
CKIRV2Graph backward 
)

Definition at line 356 of file ckernel_ir_v2_builder.c.

357 {
358  if (!forward || !backward) {
359  return -1;
360  }
361  memset(backward, 0, sizeof(*backward));
362  backward->config = forward->config;
363 
364  backward->num_buffers = forward->num_buffers;
365  backward->buffers = (CKIRV2Buffer *)calloc((size_t)backward->num_buffers, sizeof(CKIRV2Buffer));
366  if (!backward->buffers) {
367  return -1;
368  }
369  for (int i = 0; i < backward->num_buffers; ++i) {
370  CKBufferSpec spec = {0};
371  const CKIRV2Buffer *src = &forward->buffers[i];
372  spec.name = src->name;
373  spec.scope = src->scope;
374  spec.role = src->role;
375  spec.dtype = src->dtype;
376  spec.optional = src->optional;
377  spec.alias_of = src->alias_of;
378  spec.condition = src->condition;
379  memcpy(spec.shape, src->shape, sizeof(spec.shape));
380  if (ck_ir_v2_copy_buffer_spec(&spec, &backward->buffers[i]) != 0) {
381  ck_ir_v2_free(backward);
382  return -1;
383  }
384  }
385 
386  int plan_count = (int)ck_decoder_backward_plan_v2_count;
387  backward->num_nodes = forward->config.num_layers * plan_count;
388  backward->nodes = (CKIRV2Node *)calloc((size_t)backward->num_nodes, sizeof(CKIRV2Node));
389  if (!backward->nodes) {
390  ck_ir_v2_free(backward);
391  return -1;
392  }
393 
394  int idx = 0;
395  for (int layer = 0; layer < forward->config.num_layers; ++layer) {
396  for (int p = 0; p < plan_count; ++p) {
397  const CKPlanStepV2 *step = &ck_decoder_backward_plan_v2[p];
398  const CKKernelSpec *spec = ck_ir_v2_find_kernel_spec(step->kernel);
399  CKDataType dtype = spec ? spec->default_dtype : CK_DT_FP32;
400  const char *impl = ck_ir_v2_select_kernel(spec, dtype, 1);
401  CKIRV2Node *node = &backward->nodes[idx++];
402  node->layer = (uint16_t)layer;
403  node->op = ck_ir_v2_strdup(step->kernel);
404  node->kernel = ck_ir_v2_strdup(impl ? impl : step->kernel);
405  node->kernel_dtype = dtype;
406  node->condition = ck_ir_v2_strdup(step->condition);
407  node->flags = 0;
408  node->n_bindings = 0;
409  if (step->bindings && step->num_bindings > 0) {
410  int limit = (int)step->num_bindings;
411  if (limit > CK_IR_V2_MAX_BINDINGS) {
412  limit = CK_IR_V2_MAX_BINDINGS;
413  }
414  for (int b = 0; b < limit; ++b) {
415  const CKPlanBinding *binding = &step->bindings[b];
416  node->bindings[node->n_bindings].arg = ck_ir_v2_strdup(binding->arg);
417  node->bindings[node->n_bindings].buffer =
418  ck_ir_v2_find_buffer_index(backward, binding->buffer);
419  node->n_bindings++;
420  }
421  }
422  node->n_inputs = 0;
423  node->n_outputs = 0;
424  }
425  }
426  return 0;
427 }
const size_t ck_decoder_backward_plan_v2_count
const CKPlanStepV2 ck_decoder_backward_plan_v2[]
CKBufferRole role
const char * alias_of
const char * condition
CKBufferScope scope
const char * name
CKDimToken shape[4]
CKDimToken shape[4]
Definition: ckernel_ir_v2.h:29
CKBufferRole role
Definition: ckernel_ir_v2.h:27
CKBufferScope scope
Definition: ckernel_ir_v2.h:26
CKDataType dtype
Definition: ckernel_ir_v2.h:28

References CKIRV2Buffer::alias_of, CKBufferSpec::alias_of, CKIRV2Binding::arg, CKPlanBinding::arg, CKIRV2Node::bindings, CKPlanStepV2::bindings, CKIRV2Binding::buffer, CKPlanBinding::buffer, CKIRV2Graph::buffers, ck_decoder_backward_plan_v2, ck_decoder_backward_plan_v2_count, CK_DT_FP32, ck_ir_v2_copy_buffer_spec(), ck_ir_v2_find_buffer_index(), ck_ir_v2_find_kernel_spec(), ck_ir_v2_free(), CK_IR_V2_MAX_BINDINGS, ck_ir_v2_select_kernel(), ck_ir_v2_strdup(), CKIRV2Buffer::condition, CKIRV2Node::condition, CKBufferSpec::condition, CKPlanStepV2::condition, CKIRV2Graph::config, CKKernelSpec::default_dtype, CKIRV2Buffer::dtype, CKBufferSpec::dtype, CKIRV2Node::flags, CKIRV2Node::kernel, CKPlanStepV2::kernel, CKIRV2Node::kernel_dtype, CKIRV2Node::layer, CKIRV2Node::n_bindings, CKIRV2Node::n_inputs, CKIRV2Node::n_outputs, CKIRV2Buffer::name, CKBufferSpec::name, CKIRV2Graph::nodes, CKPlanStepV2::num_bindings, CKIRV2Graph::num_buffers, CKModelConfig::num_layers, CKIRV2Graph::num_nodes, CKIRV2Node::op, CKIRV2Buffer::optional, CKBufferSpec::optional, CKIRV2Buffer::role, CKBufferSpec::role, CKIRV2Buffer::scope, CKBufferSpec::scope, CKIRV2Buffer::shape, and CKBufferSpec::shape.

Referenced by main().

◆ ck_ir_v2_free()

void ck_ir_v2_free ( CKIRV2Graph graph)

Definition at line 34 of file ckernel_ir_v2.c.

35 {
36  if (!graph) {
37  return;
38  }
39  if (graph->buffers) {
40  for (int i = 0; i < graph->num_buffers; ++i) {
41  ck_ir_v2_free_buffer(&graph->buffers[i]);
42  }
43  free(graph->buffers);
44  }
45  if (graph->nodes) {
46  for (int i = 0; i < graph->num_nodes; ++i) {
47  ck_ir_v2_free_node(&graph->nodes[i]);
48  }
49  free(graph->nodes);
50  }
51  memset(graph, 0, sizeof(*graph));
52 }
static void ck_ir_v2_free_node(CKIRV2Node *node)
Definition: ckernel_ir_v2.c:20
static void ck_ir_v2_free_buffer(CKIRV2Buffer *buf)
Definition: ckernel_ir_v2.c:9

References CKIRV2Graph::buffers, ck_ir_v2_free_buffer(), ck_ir_v2_free_node(), CKIRV2Graph::nodes, CKIRV2Graph::num_buffers, and CKIRV2Graph::num_nodes.

Referenced by ck_ir_v2_build_decoder(), ck_ir_v2_build_decoder_backward(), ck_ir_v2_lower_emit_json(), ck_ir_v2_lower_graph(), ck_ir_v2_parse_json(), and main().

◆ ck_ir_v2_parse_json()

int ck_ir_v2_parse_json ( const char *  path,
CKIRV2Graph graph 
)

Definition at line 1100 of file ckernel_ir_v2.c.

1101 {
1102  if (!path || !graph) {
1103  return -1;
1104  }
1105  FILE *f = fopen(path, "rb");
1106  if (!f) {
1107  perror("ck_ir_v2_parse_json: fopen");
1108  return -1;
1109  }
1110  if (fseek(f, 0, SEEK_END) != 0) {
1111  fclose(f);
1112  return -1;
1113  }
1114  long len = ftell(f);
1115  if (len < 0) {
1116  fclose(f);
1117  return -1;
1118  }
1119  if (fseek(f, 0, SEEK_SET) != 0) {
1120  fclose(f);
1121  return -1;
1122  }
1123  char *buf = (char *)malloc((size_t)len + 1);
1124  if (!buf) {
1125  fclose(f);
1126  return -1;
1127  }
1128  size_t nread = fread(buf, 1, (size_t)len, f);
1129  fclose(f);
1130  buf[nread] = '\0';
1131 
1132  CKIRV2Graph tmp = {0};
1133  const char *end = buf + nread;
1134 
1135  tmp.has_pos_emb = 1;
1136  tmp.tie_word_embeddings = -1;
1137  tmp.fused_qkv = -1;
1138  tmp.gated_mlp = -1;
1139 
1140  if (ck_ir_v2_parse_int(buf, "\"num_layers\"", end, &tmp.config.num_layers) != 0 ||
1141  ck_ir_v2_parse_int(buf, "\"hidden_size\"", end, &tmp.config.hidden_size) != 0 ||
1142  ck_ir_v2_parse_int(buf, "\"intermediate_size\"", end, &tmp.config.intermediate_size) != 0 ||
1143  ck_ir_v2_parse_int(buf, "\"num_attention_heads\"", end, &tmp.config.num_heads) != 0 ||
1144  ck_ir_v2_parse_int(buf, "\"num_kv_heads\"", end, &tmp.config.num_kv_heads) != 0) {
1145  free(buf);
1146  return -1;
1147  }
1148 
1149  ck_ir_v2_parse_int(buf, "\"vocab_size\"", end, &tmp.config.vocab_size);
1150  ck_ir_v2_parse_int(buf, "\"context_window\"", end, &tmp.config.context_window);
1151  ck_ir_v2_parse_float(buf, "\"rms_norm_eps\"", end, &tmp.config.rms_norm_eps);
1152  ck_ir_v2_parse_float(buf, "\"rope_theta\"", end, &tmp.config.rope_theta);
1153  const char *meta_key = ck_ir_v2_find_key(buf, "\"meta\"", end);
1154  if (meta_key) {
1155  const char *brace = strchr(meta_key, '{');
1156  const char *obj_start = NULL;
1157  const char *obj_end = NULL;
1158  if (brace && ck_ir_v2_next_object(brace, end, &obj_start, &obj_end)) {
1159  ck_ir_v2_parse_bool(obj_start, "\"has_pos_emb\"", obj_end, &tmp.has_pos_emb);
1160  ck_ir_v2_parse_bool(obj_start, "\"tie_word_embeddings\"", obj_end, &tmp.tie_word_embeddings);
1161  ck_ir_v2_parse_bool(obj_start, "\"fused_qkv\"", obj_end, &tmp.fused_qkv);
1162  ck_ir_v2_parse_bool(obj_start, "\"gated_mlp\"", obj_end, &tmp.gated_mlp);
1163  }
1164  }
1165 
1166  if (ck_ir_v2_parse_buffers(buf, end, &tmp) != 0 ||
1167  ck_ir_v2_parse_nodes(buf, end, &tmp) != 0) {
1168  ck_ir_v2_free(&tmp);
1169  free(buf);
1170  return -1;
1171  }
1172 
1173  *graph = tmp;
1174  free(buf);
1175  return 0;
1176 }
static int ck_ir_v2_parse_buffers(const char *json, const char *end, CKIRV2Graph *graph)
static const char * ck_ir_v2_next_object(const char *cur, const char *end, const char **obj_start, const char **obj_end)
void ck_ir_v2_free(CKIRV2Graph *graph)
Definition: ckernel_ir_v2.c:34
static const char * ck_ir_v2_find_key(const char *json, const char *key, const char *end)
static int ck_ir_v2_parse_bool(const char *json, const char *key, const char *end, int *out_val)
static int ck_ir_v2_parse_int(const char *json, const char *key, const char *end, int *out_val)
static int ck_ir_v2_parse_nodes(const char *json, const char *end, CKIRV2Graph *graph)
static int ck_ir_v2_parse_float(const char *json, const char *key, const char *end, float *out_val)
int context_window
Definition: ckernel_ir.h:30
int intermediate_size
Definition: ck_model_api.h:37
float rms_norm_eps
Definition: ckernel_ir.h:31
float rope_theta
Definition: ckernel_ir.h:32

References ck_ir_v2_find_key(), ck_ir_v2_free(), ck_ir_v2_next_object(), ck_ir_v2_parse_bool(), ck_ir_v2_parse_buffers(), ck_ir_v2_parse_float(), ck_ir_v2_parse_int(), ck_ir_v2_parse_nodes(), CKIRV2Graph::config, CKModelConfig::context_window, end, CKIRV2Graph::fused_qkv, CKIRV2Graph::gated_mlp, CKIRV2Graph::has_pos_emb, CKModelConfig::hidden_size, CKModelConfig::intermediate_size, CKModelConfig::num_heads, CKModelConfig::num_kv_heads, CKModelConfig::num_layers, CKModelConfig::rms_norm_eps, CKModelConfig::rope_theta, CKIRV2Graph::tie_word_embeddings, and CKModelConfig::vocab_size.

Referenced by main().

◆ ck_ir_v2_serialize_json()

int ck_ir_v2_serialize_json ( const CKIRV2Graph graph,
const char *  path 
)

Definition at line 511 of file ckernel_ir_v2.c.

512 {
513  return ck_ir_v2_serialize_json_internal(graph, NULL, NULL, -1, -1, path);
514 }
static int ck_ir_v2_serialize_json_internal(const CKIRV2Graph *graph, const CKMemPlan *plan, const char *mode, int tokens_override, int base_context_window, const char *path)

References ck_ir_v2_serialize_json_internal().

Referenced by main().

◆ ck_ir_v2_serialize_json_with_plan()

int ck_ir_v2_serialize_json_with_plan ( const CKIRV2Graph graph,
const struct CKMemPlan plan,
const char *  mode,
int  tokens_override,
int  base_context_window,
const char *  path 
)