Instructions to use ZaoKing/khudi-ai-v2 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use ZaoKing/khudi-ai-v2 with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3.5-9B") model = PeftModel.from_pretrained(base_model, "ZaoKing/khudi-ai-v2") - Transformers
How to use ZaoKing/khudi-ai-v2 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="ZaoKing/khudi-ai-v2") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("ZaoKing/khudi-ai-v2", device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use ZaoKing/khudi-ai-v2 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "ZaoKing/khudi-ai-v2" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "ZaoKing/khudi-ai-v2", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/ZaoKing/khudi-ai-v2
- SGLang
How to use ZaoKing/khudi-ai-v2 with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "ZaoKing/khudi-ai-v2" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "ZaoKing/khudi-ai-v2", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "ZaoKing/khudi-ai-v2" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "ZaoKing/khudi-ai-v2", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use ZaoKing/khudi-ai-v2 with Docker Model Runner:
docker model run hf.co/ZaoKing/khudi-ai-v2
Upload onstart_v2.sh with huggingface_hub
Browse files- onstart_v2.sh +52 -33
onstart_v2.sh
CHANGED
|
@@ -1,12 +1,12 @@
|
|
| 1 |
#!/bin/bash
|
| 2 |
-
# Khudi AI v2 — On-start script (
|
| 3 |
-
# All issues from v1 addressed
|
| 4 |
|
| 5 |
-
set -e
|
| 6 |
-
|
| 7 |
|
| 8 |
echo "============================================"
|
| 9 |
-
echo "🇵🇰 Khudi AI v2 — SAFE TRAINING (
|
| 10 |
echo "============================================"
|
| 11 |
echo "Start: $(date)"
|
| 12 |
|
|
@@ -18,11 +18,11 @@ IDLE_COUNT=0
|
|
| 18 |
# ============================================================
|
| 19 |
# SAFETY: 14-hour auto-shutdown
|
| 20 |
# ============================================================
|
| 21 |
-
( sleep 50400 && echo "⏰ 14 HOUR TIMEOUT" && pkill -9 -f python ) &
|
| 22 |
TIMEOUT_PID=$!
|
| 23 |
|
| 24 |
# ============================================================
|
| 25 |
-
# SAFETY: Health check (only
|
| 26 |
# ============================================================
|
| 27 |
start_health_check() {
|
| 28 |
while true; do
|
|
@@ -33,12 +33,12 @@ start_health_check() {
|
|
| 33 |
IDLE_COUNT=$((IDLE_COUNT + 1))
|
| 34 |
if [ "$IDLE_COUNT" -gt 12 ]; then
|
| 35 |
echo "[HEALTH] GPU idle 60+ min - EMERGENCY EXIT"
|
| 36 |
-
pkill -f "python.*train" 2>/dev/null
|
| 37 |
# Save what we have
|
| 38 |
if [ -d /workspace/khudi-v2-output/checkpoints ]; then
|
| 39 |
-
LATEST=$(ls /workspace/khudi-v2-output/checkpoints/ | grep checkpoint- | sort -V | tail -1)
|
| 40 |
if [ -n "$LATEST" ]; then
|
| 41 |
-
|
|
|
|
| 42 |
from huggingface_hub import HfApi
|
| 43 |
import os
|
| 44 |
api = HfApi()
|
|
@@ -52,6 +52,7 @@ print('Saved $LATEST to HF')
|
|
| 52 |
" 2>&1
|
| 53 |
fi
|
| 54 |
fi
|
|
|
|
| 55 |
kill -9 $TIMEOUT_PID 2>/dev/null
|
| 56 |
exit 2
|
| 57 |
fi
|
|
@@ -73,7 +74,7 @@ pip install -q --no-cache-dir \
|
|
| 73 |
"accelerate==0.34.0" \
|
| 74 |
"bitsandbytes==0.43.3" \
|
| 75 |
"huggingface_hub==0.25.0" \
|
| 76 |
-
"sentencepiece" "protobuf" 2>&1 | tail -3
|
| 77 |
|
| 78 |
# ============================================================
|
| 79 |
# Step 2: Setup directories
|
|
@@ -84,31 +85,42 @@ cd /workspace
|
|
| 84 |
mkdir -p khudi-v2-output/checkpoints khudi-v2-output/hf_cache
|
| 85 |
|
| 86 |
# ============================================================
|
| 87 |
-
# Step 3: Download train script from HF
|
| 88 |
# ============================================================
|
| 89 |
echo "[3/8] Downloading training scripts from HF..."
|
| 90 |
HF_TOKEN_VALUE="HF_TOKEN_PLACEHOLDER"
|
| 91 |
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
|
|
|
|
|
|
|
|
|
| 95 |
|
| 96 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
echo "❌ FATAL: Could not download train_v2.py"
|
| 98 |
exit 1
|
| 99 |
fi
|
| 100 |
echo " ✅ train_v2.py downloaded: $(wc -l < train_v2.py) lines"
|
| 101 |
|
| 102 |
# ============================================================
|
| 103 |
-
# Step 4: Download v2 dataset (
|
| 104 |
# ============================================================
|
| 105 |
echo "[4/8] Downloading v2 dataset (4 chunks)..."
|
| 106 |
for i in 0 1 2 3; do
|
| 107 |
echo " Downloading chunk $i..."
|
| 108 |
-
|
| 109 |
-
-O "v2_chunk_$i.jsonl" \
|
| 110 |
-
"https://huggingface.co/ZaoKing/khudi-ai-v2/resolve/main/data/v2_chunk_$i.jsonl"
|
| 111 |
-
if [ ! -s "v2_chunk_$i.jsonl" ]; then
|
| 112 |
echo " ❌ FATAL: Could not download chunk $i"
|
| 113 |
exit 1
|
| 114 |
fi
|
|
@@ -116,13 +128,15 @@ done
|
|
| 116 |
|
| 117 |
# Combine chunks
|
| 118 |
cat v2_chunk_0.jsonl v2_chunk_1.jsonl v2_chunk_2.jsonl v2_chunk_3.jsonl > v2_data.jsonl
|
| 119 |
-
|
|
|
|
|
|
|
| 120 |
|
| 121 |
# ============================================================
|
| 122 |
# Step 5: Quick data validation
|
| 123 |
# ============================================================
|
| 124 |
echo "[5/8] Validating data..."
|
| 125 |
-
python -c "
|
| 126 |
import json
|
| 127 |
count = 0
|
| 128 |
errors = 0
|
|
@@ -137,7 +151,10 @@ with open('/workspace/v2_data.jsonl') as f:
|
|
| 137 |
except:
|
| 138 |
errors += 1
|
| 139 |
print(f'Valid: {count}, Errors: {errors}')
|
| 140 |
-
|
|
|
|
|
|
|
|
|
|
| 141 |
|
| 142 |
# ============================================================
|
| 143 |
# Step 6: Check for resume checkpoint
|
|
@@ -153,29 +170,31 @@ else
|
|
| 153 |
fi
|
| 154 |
|
| 155 |
# ============================================================
|
| 156 |
-
# Step 7: Start training
|
| 157 |
# ============================================================
|
| 158 |
echo "[7/8] Starting health check + training..."
|
| 159 |
start_health_check &
|
| 160 |
HEALTH_PID=$!
|
| 161 |
echo " Health check PID: $HEALTH_PID"
|
| 162 |
|
| 163 |
-
# Export
|
| 164 |
export HF_TOKEN="$HF_TOKEN_VALUE"
|
| 165 |
export HUGGINGFACE_HUB_TOKEN="$HF_TOKEN_VALUE"
|
| 166 |
export DATA_PATH="/workspace/v2_data.jsonl"
|
| 167 |
export OUTPUT_DIR="/workspace/khudi-v2-output"
|
| 168 |
export MODEL_NAME="Qwen/Qwen3.5-9B"
|
| 169 |
|
| 170 |
-
|
|
|
|
|
|
|
| 171 |
|
| 172 |
TRAIN_EXIT=$?
|
| 173 |
echo "Training exit: $TRAIN_EXIT"
|
| 174 |
echo "End: $(date)"
|
| 175 |
|
| 176 |
# Stop health check
|
| 177 |
-
kill $HEALTH_PID 2>/dev/null
|
| 178 |
-
kill $TIMEOUT_PID 2>/dev/null
|
| 179 |
|
| 180 |
# ============================================================
|
| 181 |
# Step 8: Final status
|
|
@@ -188,7 +207,7 @@ else
|
|
| 188 |
fi
|
| 189 |
|
| 190 |
# Upload final log
|
| 191 |
-
python -c "
|
| 192 |
from huggingface_hub import HfApi
|
| 193 |
api = HfApi()
|
| 194 |
api.upload_file(
|
|
@@ -199,11 +218,11 @@ api.upload_file(
|
|
| 199 |
commit_message='Training log v2'
|
| 200 |
)
|
| 201 |
print('Log uploaded')
|
| 202 |
-
" 2>&1
|
| 203 |
|
| 204 |
# Stop instance
|
| 205 |
echo "Stopping instance..."
|
| 206 |
-
pkill -9 -f python 2>/dev/null
|
| 207 |
sleep 2
|
| 208 |
-
sudo shutdown -h now 2>/dev/null || shutdown -h now 2>/dev/null
|
| 209 |
echo "Script complete"
|
|
|
|
| 1 |
#!/bin/bash
|
| 2 |
+
# Khudi AI v2 — On-start script (v3 - ALL FIXES APPLIED)
|
| 3 |
+
# All issues from v1 + v2.1 addressed
|
| 4 |
|
| 5 |
+
# Don't use 'set -e' - we want to handle errors gracefully
|
| 6 |
+
# instead of exiting on first failure
|
| 7 |
|
| 8 |
echo "============================================"
|
| 9 |
+
echo "🇵🇰 Khudi AI v2 — SAFE TRAINING (v3)"
|
| 10 |
echo "============================================"
|
| 11 |
echo "Start: $(date)"
|
| 12 |
|
|
|
|
| 18 |
# ============================================================
|
| 19 |
# SAFETY: 14-hour auto-shutdown
|
| 20 |
# ============================================================
|
| 21 |
+
( sleep 50400 && echo "⏰ 14 HOUR TIMEOUT" && pkill -9 -f "python train_v2" ) &
|
| 22 |
TIMEOUT_PID=$!
|
| 23 |
|
| 24 |
# ============================================================
|
| 25 |
+
# SAFETY: Health check (only after training starts)
|
| 26 |
# ============================================================
|
| 27 |
start_health_check() {
|
| 28 |
while true; do
|
|
|
|
| 33 |
IDLE_COUNT=$((IDLE_COUNT + 1))
|
| 34 |
if [ "$IDLE_COUNT" -gt 12 ]; then
|
| 35 |
echo "[HEALTH] GPU idle 60+ min - EMERGENCY EXIT"
|
|
|
|
| 36 |
# Save what we have
|
| 37 |
if [ -d /workspace/khudi-v2-output/checkpoints ]; then
|
| 38 |
+
LATEST=$(ls /workspace/khudi-v2-output/checkpoints/ 2>/dev/null | grep checkpoint- | sort -V | tail -1)
|
| 39 |
if [ -n "$LATEST" ]; then
|
| 40 |
+
echo "Saving $LATEST to HF..."
|
| 41 |
+
HF_TOKEN="$HF_TOKEN_VALUE" python -c "
|
| 42 |
from huggingface_hub import HfApi
|
| 43 |
import os
|
| 44 |
api = HfApi()
|
|
|
|
| 52 |
" 2>&1
|
| 53 |
fi
|
| 54 |
fi
|
| 55 |
+
pkill -9 -f "python train_v2" 2>/dev/null
|
| 56 |
kill -9 $TIMEOUT_PID 2>/dev/null
|
| 57 |
exit 2
|
| 58 |
fi
|
|
|
|
| 74 |
"accelerate==0.34.0" \
|
| 75 |
"bitsandbytes==0.43.3" \
|
| 76 |
"huggingface_hub==0.25.0" \
|
| 77 |
+
"sentencepiece" "protobuf" 2>&1 | tail -3 || echo " ⚠️ Some packages may have failed"
|
| 78 |
|
| 79 |
# ============================================================
|
| 80 |
# Step 2: Setup directories
|
|
|
|
| 85 |
mkdir -p khudi-v2-output/checkpoints khudi-v2-output/hf_cache
|
| 86 |
|
| 87 |
# ============================================================
|
| 88 |
+
# Step 3: Download train script from HF
|
| 89 |
# ============================================================
|
| 90 |
echo "[3/8] Downloading training scripts from HF..."
|
| 91 |
HF_TOKEN_VALUE="HF_TOKEN_PLACEHOLDER"
|
| 92 |
|
| 93 |
+
# FIX: Add retry logic
|
| 94 |
+
download_with_retry() {
|
| 95 |
+
local url="$1"
|
| 96 |
+
local output="$2"
|
| 97 |
+
local max_retries=3
|
| 98 |
+
local retry=0
|
| 99 |
|
| 100 |
+
while [ $retry -lt $max_retries ]; do
|
| 101 |
+
if wget -q --header="Authorization: Bearer $HF_TOKEN_VALUE" -O "$output" "$url" && [ -s "$output" ]; then
|
| 102 |
+
return 0
|
| 103 |
+
fi
|
| 104 |
+
retry=$((retry + 1))
|
| 105 |
+
echo " Retry $retry/$max_retries for $output..."
|
| 106 |
+
sleep 5
|
| 107 |
+
done
|
| 108 |
+
return 1
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
if ! download_with_retry "https://huggingface.co/ZaoKing/khudi-ai-v2/resolve/main/train_v2.py" "train_v2.py"; then
|
| 112 |
echo "❌ FATAL: Could not download train_v2.py"
|
| 113 |
exit 1
|
| 114 |
fi
|
| 115 |
echo " ✅ train_v2.py downloaded: $(wc -l < train_v2.py) lines"
|
| 116 |
|
| 117 |
# ============================================================
|
| 118 |
+
# Step 4: Download v2 dataset (4 chunks)
|
| 119 |
# ============================================================
|
| 120 |
echo "[4/8] Downloading v2 dataset (4 chunks)..."
|
| 121 |
for i in 0 1 2 3; do
|
| 122 |
echo " Downloading chunk $i..."
|
| 123 |
+
if ! download_with_retry "https://huggingface.co/ZaoKing/khudi-ai-v2/resolve/main/data/v2_chunk_$i.jsonl" "v2_chunk_$i.jsonl"; then
|
|
|
|
|
|
|
|
|
|
| 124 |
echo " ❌ FATAL: Could not download chunk $i"
|
| 125 |
exit 1
|
| 126 |
fi
|
|
|
|
| 128 |
|
| 129 |
# Combine chunks
|
| 130 |
cat v2_chunk_0.jsonl v2_chunk_1.jsonl v2_chunk_2.jsonl v2_chunk_3.jsonl > v2_data.jsonl
|
| 131 |
+
TOTAL=$(wc -l < v2_data.jsonl)
|
| 132 |
+
SIZE=$(ls -lh v2_data.jsonl | awk '{print $5}')
|
| 133 |
+
echo " ✅ Combined: $TOTAL samples ($SIZE)"
|
| 134 |
|
| 135 |
# ============================================================
|
| 136 |
# Step 5: Quick data validation
|
| 137 |
# ============================================================
|
| 138 |
echo "[5/8] Validating data..."
|
| 139 |
+
HF_TOKEN="$HF_TOKEN_VALUE" python -c "
|
| 140 |
import json
|
| 141 |
count = 0
|
| 142 |
errors = 0
|
|
|
|
| 151 |
except:
|
| 152 |
errors += 1
|
| 153 |
print(f'Valid: {count}, Errors: {errors}')
|
| 154 |
+
if count < 1000:
|
| 155 |
+
print('FATAL: Not enough valid samples!')
|
| 156 |
+
exit(1)
|
| 157 |
+
" || { echo "❌ Data validation failed"; exit 1; }
|
| 158 |
|
| 159 |
# ============================================================
|
| 160 |
# Step 6: Check for resume checkpoint
|
|
|
|
| 170 |
fi
|
| 171 |
|
| 172 |
# ============================================================
|
| 173 |
+
# Step 7: Start training
|
| 174 |
# ============================================================
|
| 175 |
echo "[7/8] Starting health check + training..."
|
| 176 |
start_health_check &
|
| 177 |
HEALTH_PID=$!
|
| 178 |
echo " Health check PID: $HEALTH_PID"
|
| 179 |
|
| 180 |
+
# Export ALL required env vars
|
| 181 |
export HF_TOKEN="$HF_TOKEN_VALUE"
|
| 182 |
export HUGGINGFACE_HUB_TOKEN="$HF_TOKEN_VALUE"
|
| 183 |
export DATA_PATH="/workspace/v2_data.jsonl"
|
| 184 |
export OUTPUT_DIR="/workspace/khudi-v2-output"
|
| 185 |
export MODEL_NAME="Qwen/Qwen3.5-9B"
|
| 186 |
|
| 187 |
+
# FIX: Pass --epochs 1 explicitly
|
| 188 |
+
cd /workspace
|
| 189 |
+
python train_v2.py $RESUME_FLAG --epochs 1 2>&1
|
| 190 |
|
| 191 |
TRAIN_EXIT=$?
|
| 192 |
echo "Training exit: $TRAIN_EXIT"
|
| 193 |
echo "End: $(date)"
|
| 194 |
|
| 195 |
# Stop health check
|
| 196 |
+
kill $HEALTH_PID 2>/dev/null || true
|
| 197 |
+
kill $TIMEOUT_PID 2>/dev/null || true
|
| 198 |
|
| 199 |
# ============================================================
|
| 200 |
# Step 8: Final status
|
|
|
|
| 207 |
fi
|
| 208 |
|
| 209 |
# Upload final log
|
| 210 |
+
HF_TOKEN="$HF_TOKEN_VALUE" python -c "
|
| 211 |
from huggingface_hub import HfApi
|
| 212 |
api = HfApi()
|
| 213 |
api.upload_file(
|
|
|
|
| 218 |
commit_message='Training log v2'
|
| 219 |
)
|
| 220 |
print('Log uploaded')
|
| 221 |
+
" 2>&1 || echo " Log upload failed"
|
| 222 |
|
| 223 |
# Stop instance
|
| 224 |
echo "Stopping instance..."
|
| 225 |
+
pkill -9 -f "python train_v2" 2>/dev/null || true
|
| 226 |
sleep 2
|
| 227 |
+
sudo shutdown -h now 2>/dev/null || shutdown -h now 2>/dev/null || true
|
| 228 |
echo "Script complete"
|