Model reference · open weights
h2o-danube3 is an open-weight language model from h2oai. AxForge deploys and operates it for you on dedicated EU-owned hardware — with the licence handled where one is required.
Available as managed deployment — configured and operated for you on dedicated EU hardware, quoted per deployment.
What it is
| Released by | h2oai |
|---|---|
| Type | Language models |
| Task | Text gen |
| Parameters (lead) | 514M |
| Context | 8k tokens |
| Runs with | transformers |
| Released | 2024-07-04 |
| Popularity | 75k downloads / month |
| Licence | Open weights |
About
alt="Slightly cropped image" style="width: 102%; height: 102%; object-fit: cover; object-position: center; margin: -5% -5% -5% -5%;">
h2o-danube3-500m-chat is a chat fine-tuned model by H2O.ai with 500 million parameters. We release two versions of this model:
| Model Name | Description |
|---|---|
| h2oai/h2o-danube3-500m-base | Base model |
| h2oai/h2o-danube3-500m-chat | Chat model |
This model was trained using H2O LLM Studio.
Can be run natively and fully offline on phones - try it yourself with H2O AI Personal GPT.
We adjust the Llama 2 architecture for a total of around 500m parameters. For details, please refer to our Technical Report. We use the Mistral tokenizer with a vocabulary size of 32,000 and train our model up to a context length of 8,192.
The details of the model architecture are:
| Hyperparameter | Value |
|---|---|
| n_layers | 16 |
| n_heads | 16 |
| n_query_groups | 8 |
| n_embd | 1536 |
| vocab size | 32000 |
| sequence length | 8192 |
To use the model with the transformers library on a machine with GPUs, first make sure you have the transformers library installed.
pip install transformers>=4.42.3
import torch
from transformers import pipeline
pipe = pipeline(
"text-generation",
model="h2oai/h2o-danube3-500m-chat",
torch_dtype=torch.bfloat16,
device_map="auto",
)
# We use the HF Tokenizer chat template to format each message
# https://huggingface.co/docs/transformers/main/en/chat_templating
messages = [
{"role": "user", "content": "Why is drinking water so healthy?"},
]
prompt = pipe.tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
res = pipe(
prompt,
return_full_text=False,
max_new_tokens=256,
)
print(res[0]["generated_text"])
This will apply and run the correct prompt format out of the box:
Alternatively, one can also run it via:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "h2oai/h2o-danube3-500m-chat"
tokenizer = AutoTokenizer.from_pretrained(
model_name,
)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.bfloat16,
device_map="auto",
trust_remote_code=True,
)
messages = [
{"role": "user", "content": "Why is drinking water so healthy?"},
]
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
inputs = tokenizer(
prompt, return_tensors="pt", add_special_tokens=False
).to("cuda")
# generate configuration can be modified to your needs
tokens = model.generate(
input_ids=inputs["input_ids"],
attention_mask=inputs["attention_mask"],
min_new_tokens=2,
max_new_tokens=256,
)[0]
tokens = tokens[inputs["input_ids"].shape[1]:]
answer = tokenizer.decode(tokens, skip_special_tokens=True)
print(answer)
You can load the models using quantization by specifying load_in_8bit=True or load_in_4bit=True. Also, sharding on multiple GPUs is possible by setting device_map=auto.
LlamaForCausalLM(
(model): LlamaModel(
(embed_tokens): Embedding(32000, 1536, padding_idx=0)
(layers): ModuleList(
(0-15): 16 x LlamaDecoderLayer(
(self_attn): LlamaSdpaAttention(
(q_proj): Linear(in_features=1536, out_features=1536, bias=False)
(k_proj): Linear(in_features=1536, out_features=768, bias=False)
(v_proj): Linear(in_features=1536, out_features=768, bias=False)
(o_proj): Linear(in_features=1536, out_features=1536, bias=False)
(rotary_emb): LlamaRotaryEmbedding()
)
(mlp): LlamaMLP(
(gate_proj): Linear(in_features=1536, out_features=4096, bias=False)
(up_proj): Linear(in_features=1536, out_features=4096, bias=False)
(down_proj): Linear(in_features=4096, out_features=1536, bias=False)
(act_fn): SiLU()
)
(input_layernorm): LlamaRMSNorm()
(post_attention_layernorm): LlamaRMSNorm()
)
)
(norm): LlamaRMSNorm()
)
(lm_head): Linear(in_features=1536, out_features=32000, bias=False)
)
| Benchmark | acc_n |
|---|---|
| Average | 40.71 |
| ARC-challenge | 39.25 |
| Hellaswag | 61.02 |
| MMLU | 26.33 |
| TruthfulQA | 39.96 |
| Winogrande | 61.72 |
| GSM8K | 16.00 |
First Turn: 4.16
Second Turn: 2.40
Average: 3.28
Please read this disclaimer carefully before using the large language model provided in this repository. Your use of the model signifies your agreement to the following terms and conditions.
From the published model card. Full card on the HuggingFace links in the sidebar.
Using it via the API
Once AxForge deploys h2o-danube3 for you, it answers on the OpenAI-compatible API — the same base URL and keys as every other model. (h2o-danube3 below is illustrative; you get the exact model name on deployment.)
$ curl -sS https://api.axforge.ai/v1/chat/completions \
-H "Authorization: Bearer $AXFORGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"h2o-danube3","messages":[{"role":"user","content":"Hello"}]}'
Create an account — your API key is available in the console. 3M free tokens every 30 days with every new account.