ONNX Model Zoo

aifoundry-org/llama-3.2-1B-kvc-fp16-et-onnx

By aifoundry-org · ↓ 3 · ♥ 0 · Updated 2025-07-07

What's in this repo

This page lists the files in aifoundry-org/llama-3.2-1B-kvc-fp16-et-onnx, including model.onnx.

  • 1 ONNX models (.onnx files)
  • 155 files, including 34 .weight, 5 .json, 1 .md, 1 .onnx
  • Last updated 2025-07-07

ONNX files

File Size Download
model.onnx — Download

How to use

These ONNX files can be loaded with ONNX Runtime. To inspect a model graph, upload the file to the Netron viewer. Download links point to the original files on Hugging Face.

README

Llama 3.2 1B with Key-Value-Cache enabled in ONNX fp16 format

Description

This repo contains the ONNX files for the ONNX conversion of Llama 3.2 1B done by Esperanto Technologies. The model is in the fp16 format and has the KVC enabled.

How to download ONNX model and weight files

The easiest way to obtain the model is to clone this whole repo. Alternatively you can download the files is using the huggingface-hub Python library.

pip3 install huggingface-hub>=0.17.1

Then you can download any individual model file to the current directory, at high speed, with a command like this:

huggingface-cli download Esperanto/llama-3.2-1B-kvc-fp16-onnx --local-dir llama-3.2-1B-kvc-fp16-onnx --local-dir-use-symlinks False

For more documentation on downloading with huggingface-cli, please see: HF -> Hub Python Library -> Download files -> Download from the CLI.

How to run from Python code using ONNXRuntime

This model can easily be ran in a CPU using ONNXRuntime.

First install the packages
pip3 install onnx==1.16.1
pip3 install onnxruntime==1.17.1
Example code: generate text with this model

We define the loop with greedy decoding:

import numpy as np
import onnxruntime
import onnx
from transformers import AutoTokenizer

def generate_text(model_path, prompt, tokenizer, max_gen_tokens, total_sequence, window, context):
    model = onnx.load(model_path)

    #we create the inputs for the first iteration
    input_tensor = tokenizer(prompt, return_tensors="pt")
    prompt_size = len(input_tensor['input_ids'][0])
    actual_input = input_tensor['input_ids']
    if prompt_size < window:
        actual_input = np.concatenate((tokenizer.bos_token_id*np.ones([1, window - prompt_size], dtype = 'int64'),
                                       actual_input), axis=1)
    if prompt_size + max_gen_tokens > total_sequence:
        print("ERROR: Longer total sequence is needed!")
        return
    first_attention = np.concatenate((np.zeros([1, total_sequence - window], dtype = 'int64'),
                                      np.ones((1, window), dtype = 'int64')), axis=1)
    max_gen_tokens += prompt_size #we need to generate on top of parsing the prompt
    inputs_names =[node.name for node in model.graph.input]
    output_names =[node.name for node in model.graph.output]
    n_heads = 8 #gqa-heads of the kvc
    inputs_dict = {}
    inputs_dict['input_ids'] = actual_input[:, :window].reshape(1, window).numpy()
    inputs_dict['attention_mask'] = first_attention
    index_pos = sum(first_attention[0])
    inputs_dict['position_ids'] = np.concatenate((np.zeros([1, total_sequence - index_pos], dtype = 'int64'), np.arange(index_pos, dtype = 'int64').reshape(1, index_pos)), axis=1)
    inputs_dict['tree_attention'] = np.triu(-65504*np.ones(total_sequence), k= 1).astype('float16').reshape(1, 1, total_sequence, total_sequence)
    for name in inputs_names:
        if name == 'input_ids' or name == 'attention_mask' or name == 'position_ids' or name == 'tree_attention': continue
        inputs_dict[name] = np.zeros([1, n_heads, context-window, 64], dtype="float16")
    index = 0
    new_token = np.array([10])
    next_index = window
    old_j = 0
    total_input = actual_input.numpy()

    rt_session = onnxruntime.InferenceSession(model_path)
    ## We run the inferences
    while next_index < max_gen_tokens:
        if new_token.any() == tokenizer.eos_token_id:
            break
        #inference
        output = rt_session.run(output_names, inputs_dict)
        outs_dictionary = {name: content for (name, content) in zip (output_names, output)}
        #we prepare the inputs for the next inference
        for name in inputs_names:
            if name == 'input_ids':
                old_j = next_index
                if next_index < prompt_size:
                    if prompt_size - next_index >= window: next_index += window
                    else: next_index = prompt_size 
                    j = next_index - window
                else:
                    next_index +=1
                    j = next_index - window
                    new_token = outs_dictionary['logits'].argmax(-1).reshape(1, window)
                    total_input = np.concatenate((total_input, new_token[: , -1:]), axis = 1)
                inputs_dict['input_ids']= total_input[:, j:next_index].reshape(1, window)
            elif name == 'attention_mask':
                inputs_dict['attention_mask'] = np.concatenate((np.zeros((1, total_sequence-next_index), dtype = 'int64'), np.ones((1, next_index), dtype = 'int64')), axis=1)
            elif name == 'position_ids':
                inputs_dict['position_ids'] = np.concatenate((np.zeros([1, total_sequence - next_index], dtype = 'int64'), np.arange(next_index, dtype = 'int64').reshape(1, next_index)), axis=1)
            elif name == 'tree_attention': continue
            else:
                old_name = name.replace("past_key_values", "present")
                inputs_dict[name] = outs_dictionary[old_name][:, :, next_index-old_j:context-window+(next_index - old_j), :]

    answer = tokenizer.decode(total_input[0], skip_special_tokens=True, clean_up_tokenization_spaces=False)
    return answer

We now run the inferences:

tokenizer = AutoTokenizer.from_pretrained("Esperanto/llama-3.2-1B-kvc-fp16-onnx")
model_path = "llama-3.2-1B-kvc-fp16-onnx/model.onnx"

max_gen_tokens = 20    #number of tokens we want tog eneral
total_sequence = 128   #total sequence_length
context = 1024         #the context to extend the kvc
window = 16            #number of tokens we want to parse at the time
messages = [
    {"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
    {"role": "user", "content": "Who are you?"},
]

prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)

generated = generate_text(model_path, prompt, tokenizer, max_gen_tokens, total_sequence, window, context)
print(generated)

Model info

onnx text-generation-inference llama llama3 facebook meta text-generation conversational en de fr it
↓ 3 ♥ 0

Created: 2025-07-07

Updated: 2025-07-07

View on Hugging Face

Files (155)

.gitattributes
README.md
config.json
model.embed_tokens.weight
model.layers.0.input_layernorm.weight
model.layers.0.post_attention_layernorm.weight
model.layers.1.input_layernorm.weight
model.layers.1.post_attention_layernorm.weight
model.layers.10.input_layernorm.weight
model.layers.10.post_attention_layernorm.weight
model.layers.11.input_layernorm.weight
model.layers.11.post_attention_layernorm.weight
model.layers.12.input_layernorm.weight
model.layers.12.post_attention_layernorm.weight
model.layers.13.input_layernorm.weight
model.layers.13.post_attention_layernorm.weight
model.layers.14.input_layernorm.weight
model.layers.14.post_attention_layernorm.weight
model.layers.15.input_layernorm.weight
model.layers.15.post_attention_layernorm.weight
model.layers.2.input_layernorm.weight
model.layers.2.post_attention_layernorm.weight
model.layers.3.input_layernorm.weight
model.layers.3.post_attention_layernorm.weight
model.layers.4.input_layernorm.weight
model.layers.4.post_attention_layernorm.weight
model.layers.5.input_layernorm.weight
model.layers.5.post_attention_layernorm.weight
model.layers.6.input_layernorm.weight
model.layers.6.post_attention_layernorm.weight
model.layers.7.input_layernorm.weight
model.layers.7.post_attention_layernorm.weight
model.layers.8.input_layernorm.weight
model.layers.8.post_attention_layernorm.weight
model.layers.9.input_layernorm.weight
model.layers.9.post_attention_layernorm.weight
model.norm.weight
model.onnx ONNX
onnx__MatMul_5073
onnx__MatMul_5074
onnx__MatMul_5075
onnx__MatMul_5100
onnx__MatMul_5101
onnx__MatMul_5102
onnx__MatMul_5103
onnx__MatMul_5104
onnx__MatMul_5105
onnx__MatMul_5106
onnx__MatMul_5131
onnx__MatMul_5132
onnx__MatMul_5133
onnx__MatMul_5134
onnx__MatMul_5135
onnx__MatMul_5136
onnx__MatMul_5137
onnx__MatMul_5162
onnx__MatMul_5163
onnx__MatMul_5164
onnx__MatMul_5165
onnx__MatMul_5166
onnx__MatMul_5167
onnx__MatMul_5168
onnx__MatMul_5193
onnx__MatMul_5194
onnx__MatMul_5195
onnx__MatMul_5196
onnx__MatMul_5197
onnx__MatMul_5198
onnx__MatMul_5199
onnx__MatMul_5224
onnx__MatMul_5225
onnx__MatMul_5226
onnx__MatMul_5227
onnx__MatMul_5228
onnx__MatMul_5229
onnx__MatMul_5230
onnx__MatMul_5255
onnx__MatMul_5256
onnx__MatMul_5257
onnx__MatMul_5258
onnx__MatMul_5259
onnx__MatMul_5260
onnx__MatMul_5261
onnx__MatMul_5286
onnx__MatMul_5287
onnx__MatMul_5288
onnx__MatMul_5289
onnx__MatMul_5290
onnx__MatMul_5291
onnx__MatMul_5292
onnx__MatMul_5317
onnx__MatMul_5318
onnx__MatMul_5319
onnx__MatMul_5320
onnx__MatMul_5321
onnx__MatMul_5322
onnx__MatMul_5323
onnx__MatMul_5348
onnx__MatMul_5349
onnx__MatMul_5350
onnx__MatMul_5351
onnx__MatMul_5352
onnx__MatMul_5353
onnx__MatMul_5354
onnx__MatMul_5379
onnx__MatMul_5380
onnx__MatMul_5381
onnx__MatMul_5382
onnx__MatMul_5383
onnx__MatMul_5384
onnx__MatMul_5385
onnx__MatMul_5410
onnx__MatMul_5411
onnx__MatMul_5412
onnx__MatMul_5413
onnx__MatMul_5414
onnx__MatMul_5415
onnx__MatMul_5416
onnx__MatMul_5441
onnx__MatMul_5442
onnx__MatMul_5443
onnx__MatMul_5444
onnx__MatMul_5445
onnx__MatMul_5446
onnx__MatMul_5447
onnx__MatMul_5472
onnx__MatMul_5473
onnx__MatMul_5474
onnx__MatMul_5475
onnx__MatMul_5476
onnx__MatMul_5477
onnx__MatMul_5478
onnx__MatMul_5503
onnx__MatMul_5504
onnx__MatMul_5505
onnx__MatMul_5506
onnx__MatMul_5507
onnx__MatMul_5508
onnx__MatMul_5509
onnx__MatMul_5534
onnx__MatMul_5535
onnx__MatMul_5536
onnx__MatMul_5537
onnx__MatMul_5538
onnx__MatMul_5539
onnx__MatMul_5540
onnx__MatMul_5565
onnx__MatMul_5566
onnx__MatMul_5567
onnx__MatMul_5568
onnx__MatMul_5572
special_tokens_map.json
token_id_to_str.json
tokenizer.json
tokenizer_config.json

Related models