Qwen3-Embedding-RKLLM / rkllm-convert.py
happyme531's picture
Upload 6 files
c8faba2 verified
import os
from rkllm.api import RKLLM
def convert_model(model_path, output_name, do_quantization=False):
"""转换单个模型"""
llm = RKLLM()
print(f"正在加载模型: {model_path}")
ret = llm.load_huggingface(model=model_path, model_lora=None, device='cpu')
if ret != 0:
print(f'加载模型失败: {model_path}')
return ret
print(f"正在构建模型: {output_name} (量化: {do_quantization})")
qparams = None
ret = llm.build(do_quantization=do_quantization, optimization_level=1, quantized_dtype='w8a8',
quantized_algorithm='normal', target_platform='rk3588', num_npu_core=3, extra_qparams=qparams)
if ret != 0:
print(f'构建模型失败: {output_name}')
return ret
# 导出rkllm模型
print(f"正在导出模型: {output_name}")
ret = llm.export_rkllm(output_name)
if ret != 0:
print(f'导出模型失败: {output_name}')
return ret
print(f"成功转换: {output_name}")
return 0
def main():
"""主函数:遍历所有子文件夹并转换模型"""
current_dir = '.'
# 获取所有子文件夹
subdirs = [d for d in os.listdir(current_dir)
if os.path.isdir(os.path.join(current_dir, d)) and not d.startswith('.')]
print(f"找到 {len(subdirs)} 个模型文件夹: {subdirs}")
for subdir in subdirs:
model_path = os.path.join(current_dir, subdir)
# 生成输出文件名
base_name = subdir.replace('/', '_').replace('\\', '_')
quantized_output = f"{base_name}_w8a8.rkllm"
unquantized_output = f"{base_name}_f16.rkllm"
print(f"\n{'='*50}")
print(f"处理模型文件夹: {subdir}")
print(f"{'='*50}")
# 转换非量化版本
print(f"\n--- 转换非量化版本 ---")
ret = convert_model(model_path, unquantized_output, do_quantization=False)
if ret != 0:
print(f"非量化版本转换失败: {subdir}")
continue
# 转换量化版本
print(f"\n--- 转换量化版本 ---")
ret = convert_model(model_path, quantized_output, do_quantization=True)
if ret != 0:
print(f"量化版本转换失败: {subdir}")
continue
print(f"\n✓ {subdir} 模型转换完成!")
print(f" - 非量化版本: {unquantized_output}")
print(f" - 量化版本: {quantized_output}")
if __name__ == "__main__":
main()