Cialtion commited on
Commit
55271ca
·
verified ·
1 Parent(s): 707405f

Upload llama-cpp-quantize.sh with huggingface_hub

Browse files
Files changed (1) hide show
  1. llama-cpp-quantize.sh +151 -0
llama-cpp-quantize.sh ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ # ============================================================
4
+ # llama.cpp GGUF 批量量化脚本
5
+ # 用途:将F16 GGUF模型量化为Ollama主流格式
6
+ # ============================================================
7
+
8
+ # 配置区
9
+ # 配置区
10
+ LLAMA_CPP_DIR="/inspire/hdd/global_user/shixiaoxin-253107030017/sxx/llama.cpp"
11
+ QUANTIZE_BIN="${LLAMA_CPP_DIR}/build/bin/llama-quantize"
12
+ INPUT_DIR="./gguf_models"
13
+ OUTPUT_DIR="./gguf_quantized"
14
+
15
+ export LD_LIBRARY_PATH="${LLAMA_CPP_DIR}/build/bin:${LD_LIBRARY_PATH}"
16
+
17
+ # Ollama主流量化格式(按推荐程度排序)
18
+ # Q4_K_M: 最流行,平衡质量与大小(推荐)
19
+ # Q5_K_M: 质量更好,文件稍大
20
+ # Q8_0: 高质量,文件较大
21
+ # Q4_0: 基础4bit,兼容性好
22
+ # Q3_K_M: 更小文件,质量损失较大
23
+ QUANT_TYPES=("Q4_K_M" "Q5_K_M" "Q8_0")
24
+
25
+ # ============================================================
26
+ # 检查环境
27
+ # ============================================================
28
+ echo "🔧 检查环境..."
29
+
30
+ # 检查量化工具是否存在
31
+ if [ ! -f "$QUANTIZE_BIN" ]; then
32
+ echo "❌ 错误:找不到量化工具 $QUANTIZE_BIN"
33
+ echo "请先编译llama.cpp:"
34
+ echo " cd $LLAMA_CPP_DIR"
35
+ echo " mkdir -p build && cd build"
36
+ echo " cmake .. -DGGML_CUDA=ON"
37
+ echo " make -j$(nproc)"
38
+ exit 1
39
+ fi
40
+
41
+ # 检查输入目录
42
+ if [ ! -d "$INPUT_DIR" ]; then
43
+ echo "❌ 错误:输入目录不存在 $INPUT_DIR"
44
+ echo "请先运行convert_hf_to_gguf.py转换模型"
45
+ exit 1
46
+ fi
47
+
48
+ # 创建输出目录
49
+ mkdir -p "$OUTPUT_DIR"
50
+
51
+ echo "✅ 环境检查通过"
52
+ echo ""
53
+
54
+ # ============================================================
55
+ # 获取待量化模型列表
56
+ # ============================================================
57
+ echo "📂 扫描待量化模型..."
58
+
59
+ MODELS=($(find "$INPUT_DIR" -maxdepth 1 -name "*.gguf" -type f))
60
+
61
+ if [ ${#MODELS[@]} -eq 0 ]; then
62
+ echo "❌ 未找到任何.gguf文件在 $INPUT_DIR"
63
+ exit 1
64
+ fi
65
+
66
+ echo "✅ 找到 ${#MODELS[@]} 个模型待量化"
67
+ for m in "${MODELS[@]}"; do
68
+ echo " - $(basename "$m")"
69
+ done
70
+ echo ""
71
+
72
+ # ============================================================
73
+ # 批量量化
74
+ # ============================================================
75
+ echo "🚀 开始批量量化..."
76
+ echo "量化格式: ${QUANT_TYPES[*]}"
77
+ echo ""
78
+
79
+ TOTAL=$((${#MODELS[@]} * ${#QUANT_TYPES[@]}))
80
+ CURRENT=0
81
+ SUCCESS=0
82
+ FAILED=0
83
+
84
+ for MODEL_PATH in "${MODELS[@]}"; do
85
+ MODEL_NAME=$(basename "$MODEL_PATH" .gguf)
86
+
87
+ for QTYPE in "${QUANT_TYPES[@]}"; do
88
+ CURRENT=$((CURRENT + 1))
89
+ OUTPUT_FILE="${OUTPUT_DIR}/${MODEL_NAME}-${QTYPE}.gguf"
90
+
91
+ echo "=============================================="
92
+ echo "[$CURRENT/$TOTAL] 量化: ${MODEL_NAME} -> ${QTYPE}"
93
+ echo "输入: $MODEL_PATH"
94
+ echo "输出: $OUTPUT_FILE"
95
+ echo "=============================================="
96
+
97
+ # 跳过已存在的文件
98
+ if [ -f "$OUTPUT_FILE" ]; then
99
+ echo "⏭️ 文件已存在,跳过"
100
+ SUCCESS=$((SUCCESS + 1))
101
+ continue
102
+ fi
103
+
104
+ # 执行量化
105
+ "$QUANTIZE_BIN" "$MODEL_PATH" "$OUTPUT_FILE" "$QTYPE"
106
+
107
+ if [ $? -eq 0 ]; then
108
+ # 显示文件大小
109
+ SIZE=$(du -h "$OUTPUT_FILE" | cut -f1)
110
+ echo "✅ 成功!文件大小: $SIZE"
111
+ SUCCESS=$((SUCCESS + 1))
112
+ else
113
+ echo "❌ 量化失败"
114
+ FAILED=$((FAILED + 1))
115
+ fi
116
+ echo ""
117
+ done
118
+ done
119
+
120
+ # ============================================================
121
+ # 汇总报告
122
+ # ============================================================
123
+ echo ""
124
+ echo "=============================================="
125
+ echo "📊 批量量化完成"
126
+ echo "=============================================="
127
+ echo "✅ 成功: $SUCCESS"
128
+ echo "❌ 失败: $FAILED"
129
+ echo ""
130
+ echo "输出目录: $OUTPUT_DIR"
131
+ echo ""
132
+
133
+ # 列出所有生成的文件
134
+ echo "生成的模型文件:"
135
+ ls -lh "$OUTPUT_DIR"/*.gguf 2>/dev/null | awk '{print " " $9 " (" $5 ")"}'
136
+
137
+ echo ""
138
+ echo "=============================================="
139
+ echo "📦 Ollama发布指南"
140
+ echo "=============================================="
141
+ echo "1. 创建Modelfile:"
142
+ echo ' FROM ./your_model-Q4_K_M.gguf'
143
+ echo ' TEMPLATE """{{ .Prompt }}"""'
144
+ echo ' PARAMETER temperature 0.7'
145
+ echo ""
146
+ echo "2. 创建本地模型:"
147
+ echo " ollama create your-model-name -f Modelfile"
148
+ echo ""
149
+ echo "3. 推送到Ollama Hub:"
150
+ echo " ollama push username/model-name"
151
+ echo "=============================================="