diff --git a/README.md b/README.md index 64787f1..cdce099 100644 --- a/README.md +++ b/README.md @@ -24,25 +24,37 @@ The integration can either run the model in 2 different ways: ## Home LLM Model The "Home" models are a fine tuning of various Large Languages Models that are under 5B parameters. The models are able to control devices in the user's house as well as perform basic question and answering. The fine tuning dataset is a [custom synthetic dataset](./data) designed to teach the model function calling based on the device information in the context. -The latest models can be found on HuggingFace: -3B v3 (Based on StableLM-Zephyr-3B): https://huggingface.co/acon96/Home-3B-v3-GGUF (Zephyr prompt format) -1B v3 (Based on TinyLlama-1.1B): https://huggingface.co/acon96/Home-1B-v3-GGUF (Zephyr prompt format) +The latest models can be found on HuggingFace: -Non English experiments: -German, French, & Spanish (3B): https://huggingface.co/acon96/stablehome-multilingual-experimental -Polish (1B): https://huggingface.co/acon96/tinyhome-polish-experimental +**Llama 3.2**: +3B: https://huggingface.co/acon96/Home-Llama-3.2-3B +1B: TBD + +**Qwen 3**: +0.6B: TBD +1.5B: TBD + +**Gemma3**: +1B: TBD
Old Models +3B v3 (Based on StableLM-Zephyr-3B): https://huggingface.co/acon96/Home-3B-v3-GGUF (Zephyr prompt format) +1B v3 (Based on TinyLlama-1.1B): https://huggingface.co/acon96/Home-1B-v3-GGUF (Zephyr prompt format) 3B v2 (Based on Phi-2): https://huggingface.co/acon96/Home-3B-v2-GGUF (ChatML prompt format) 1B v2 (Based on Phi-1.5): https://huggingface.co/acon96/Home-1B-v2-GGUF (ChatML prompt format) 1B v1 (Based on Phi-1.5): https://huggingface.co/acon96/Home-1B-v1-GGUF (ChatML prompt format) -NOTE: The models below are only compatible with version 0.2.17 and older! +Non English experiments: +German, French, & Spanish (3B): https://huggingface.co/acon96/stablehome-multilingual-experimental +Polish (1B): https://huggingface.co/acon96/tinyhome-polish-experimental + +NOTE: The models below are only compatible with version 0.2.17 and older! 3B v1 (Based on Phi-2): https://huggingface.co/acon96/Home-3B-v1-GGUF (ChatML prompt format) +
The model is quantized using Llama.cpp in order to enable running the model in super low resource environments that are common with Home Assistant installations such as Raspberry Pis. diff --git a/requirements-all.txt b/requirements-all.txt new file mode 100644 index 0000000..659dd51 --- /dev/null +++ b/requirements-all.txt @@ -0,0 +1,5 @@ +-r requirements.txt +-r requirements-dev.txt +-r custom_components/requirements.txt +-r custom_components/requirements-dev.txt +-r data/requirements.txt \ No newline at end of file diff --git a/scripts/convert_and_quantize.sh b/scripts/convert_and_quantize.sh index 96c9d50..534144c 100755 --- a/scripts/convert_and_quantize.sh +++ b/scripts/convert_and_quantize.sh @@ -9,15 +9,22 @@ if [[ ! -d "./models/$MODEL_NAME" ]]; then exit -1 fi +if [ -f "./models/$MODEL_NAME/gguf_overrides.json" ]; then + OVERRIDES="--metadata ./models/$MODEL_NAME/gguf_overrides.json" + echo "Using metadata from ./models/$MODEL_NAME/gguf_overrides.json" +else + OVERRIDES="" +fi + echo "Converting to GGUF..." if [ ! -f "./models/$MODEL_NAME/$MODEL_NAME.f16.gguf" ]; then - $LLAMA_CPP/convert_hf_to_gguf.py --outfile ./models/$MODEL_NAME/$MODEL_NAME.f16.gguf --outtype f16 ./models/$MODEL_NAME/ + $LLAMA_CPP/convert_hf_to_gguf.py --outfile ./models/$MODEL_NAME/$MODEL_NAME.f16.gguf --outtype f16 ./models/$MODEL_NAME/ $OVERRIDES else echo "Converted model for already exists. Skipping..." fi -DESIRED_QUANTS=("Q8_0" "Q5_K_M" "Q4_K_M" "Q3_K_M" "Q2_K") +DESIRED_QUANTS=("Q8_0" "Q5_K_M" "Q4_0" "Q4_1" "Q4_K_M") for QUANT in "${DESIRED_QUANTS[@]}" do QUANT_LOWER=$(echo "$QUANT" | awk '{print tolower($0)}') diff --git a/scripts/upload_to_hf.sh b/scripts/upload_to_hf.sh new file mode 100644 index 0000000..1faae1e --- /dev/null +++ b/scripts/upload_to_hf.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -e + +MODEL_NAME=$1 + +huggingface-cli upload $MODEL_NAME models/$MODEL_NAME \ + --repo-type model --commit-message "Upload model" \ + --exclude "runs/" "training_args.bin" "gguf_overrides.json" \ No newline at end of file diff --git a/train.ipynb b/train.ipynb index 428bf39..fb5f823 100644 --- a/train.ipynb +++ b/train.ipynb @@ -91,7 +91,7 @@ "id": "e71572c4", "metadata": {}, "source": [ - "# Qwen3" + "# Qwen3 1.7b" ] }, { @@ -101,6 +101,8 @@ "metadata": {}, "outputs": [], "source": [ + "# HYPERPARAMETERS ARE NOT TUNED YET\n", + "# TODO: impelment no think in template\n", "do_training_run(TrainingRunArguments(\n", " run_name=get_next_run_name(\"Home-Qwen-3-1.7B\"),\n", " base_model=\"Qwen/Qwen3-1.7B\",\n", @@ -113,6 +115,85 @@ " save_steps=200, save_total_limit=1, eval_steps=200, logging_steps=2,\n", "))" ] + }, + { + "cell_type": "markdown", + "id": "f2f49f10", + "metadata": {}, + "source": [ + "# Qwen 2.5 0.6B & 1.5B" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ca9e2dec", + "metadata": {}, + "outputs": [], + "source": [ + "# HYPERPARAMETERS ARE NOT TUNED YET\n", + "do_training_run(TrainingRunArguments(\n", + " run_name=get_next_run_name(\"Home-Qwen-2.5-0.6B\"),\n", + " base_model=\"Qwen/Qwen2.5-0.6B-Instruct\",\n", + " bf16=True,\n", + " train_dataset=\"data/home_assistant_train.jsonl\",\n", + " test_dataset=\"data/home_assistant_test.jsonl\",\n", + " learning_rate=2e-5, learning_rate_warmup=0.03, \n", + " batch_size=64, micro_batch_size=2, epochs=1,\n", + " ctx_size=2048,\n", + " save_steps=200, save_total_limit=1, eval_steps=200, logging_steps=2,\n", + "))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6d875365", + "metadata": {}, + "outputs": [], + "source": [ + "# HYPERPARAMETERS ARE NOT TUNED YET\n", + "do_training_run(TrainingRunArguments(\n", + " run_name=get_next_run_name(\"Home-Qwen-2.5-1.5B\"),\n", + " base_model=\"Qwen/Qwen2.5-1.5B-Instruct\",\n", + " bf16=True,\n", + " train_dataset=\"data/home_assistant_train.jsonl\",\n", + " test_dataset=\"data/home_assistant_test.jsonl\",\n", + " learning_rate=2e-5, learning_rate_warmup=0.03, \n", + " batch_size=64, micro_batch_size=2, epochs=1,\n", + " ctx_size=2048,\n", + " save_steps=200, save_total_limit=1, eval_steps=200, logging_steps=2,\n", + "))" + ] + }, + { + "cell_type": "markdown", + "id": "21865d91", + "metadata": {}, + "source": [ + "# Gemma 3 1B" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "27db01c0", + "metadata": {}, + "outputs": [], + "source": [ + "# HYPERPARAMETERS ARE NOT TUNED YET\n", + "do_training_run(TrainingRunArguments(\n", + " run_name=get_next_run_name(\"Home-Gemma-3-1B\"),\n", + " base_model=\"google/gemma-3-1b-it\",\n", + " bf16=True,\n", + " train_dataset=\"data/home_assistant_train.jsonl\",\n", + " test_dataset=\"data/home_assistant_test.jsonl\",\n", + " learning_rate=2e-5, learning_rate_warmup=0.03, \n", + " batch_size=64, micro_batch_size=2, epochs=1,\n", + " ctx_size=2048,\n", + " save_steps=200, save_total_limit=1, eval_steps=200, logging_steps=2,\n", + "))" + ] } ], "metadata": {