Bee1reason Arabic Qwen 14B
模型简介
模型特点
模型能力
使用案例
🚀 Bee1reason-arabic-Qwen-14B:专为阿拉伯语逻辑推理微调的Qwen3 14B模型
Bee1reason-arabic-Qwen-14B是一个大语言模型(LLM),它基于unsloth/Qwen3-14B
基础模型(该基础模型本身基于Qwen/Qwen2-14B
)进行微调。该模型专门针对提升阿拉伯语的逻辑和演绎推理能力进行了优化,同时保留了通用的对话能力。微调过程使用了LoRA(低秩自适应)技术,并借助Unsloth库,实现了高效的训练。最终将LoRA权重与基础模型合并,得到了这个独立的16位(float16)精度模型。
🚀 快速开始
使用transformers
库
由于这是一个合并后的16位模型,你可以直接使用transformers
库加载和使用它:
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
import torch
model_id = "beetlware/Bee1reason-arabic-Qwen-14B"
# 加载分词器
tokenizer = AutoTokenizer.from_pretrained(model_id)
# 加载模型
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16, # 如果不支持bfloat16,也可以使用torch.float16
device_map="auto", # 将模型分布在可用设备(GPU/CPU)上
)
# 确保模型处于评估模式以进行推理
model.eval()
带有思考步骤的推理示例(如果模型经过训练可以生成思考步骤)
Qwen3模型需要特殊的标签来表示思考 ...
要在推理过程中启用思考模式(如果微调后的模型支持):
你可能需要构造提示来要求模型进行思考。
使用Unsloth训练的Qwen3模型通常会对tokenizer.apply_chat_template中的enable_thinking做出响应。
对于合并后的模型,其显示的能力取决于训练数据。
user_prompt_with_thinking_request = "استخدم التفكير المنطقي خطوة بخطوة: إذا كان لدي 4 تفاحات والشجرة فيها 20 تفاحة، فكم تفاحة لدي إجمالاً؟" # "使用逐步逻辑思考:如果我有4个苹果,树上有20个苹果,我总共有多少个苹果?"
messages_with_thinking = [
{"role": "user", "content": user_prompt_with_thinking_request}
]
# 应用聊天模板
# Qwen3使用特定的聊天模板。tokenizer.apply_chat_template是正确的格式化方式。
chat_prompt_with_thinking = tokenizer.apply_chat_template(
messages_with_thinking,
tokenize=False,
add_generation_prompt=True # 对于添加助手的生成提示很重要
)
inputs_with_thinking = tokenizer(chat_prompt_with_thinking, return_tensors="pt").to(model.device)
print("\n--- 带有思考请求的推理示例 ---")
streamer_think = TextStreamer(tokenizer, skip_prompt=True)
with torch.no_grad(): # 在推理过程中禁用梯度很重要
outputs_think = model.generate(
**inputs_with_thinking,
max_new_tokens=512,
temperature=0.6, # Qwen团队推荐的推理设置
top_p=0.95,
top_k=20,
pad_token_id=tokenizer.eos_token_id,
streamer=streamer_think
)
# --- 普通推理示例(无明确思考请求的对话) ---
user_prompt_normal = "ما هي عاصمة مصر؟" # "埃及的首都是什么?"
messages_normal = [
{"role": "user", "content": user_prompt_normal}
]
chat_prompt_normal = tokenizer.apply_chat_template(
messages_normal,
tokenize=False,
add_generation_prompt=True
)
inputs_normal = tokenizer(chat_prompt_normal, return_tensors="pt").to(model.device)
print("\n\n--- 普通推理示例 ---")
streamer_normal = TextStreamer(tokenizer, skip_prompt=True)
with torch.no_grad():
outputs_normal = model.generate(
**inputs_normal,
max_new_tokens=100,
temperature=0.7, # 普通聊天的推荐设置
top_p=0.8,
top_k=20,
pad_token_id=tokenizer.eos_token_id,
streamer=streamer_normal
)
使用VLLM进行高吞吐量的扩展推理
VLLM是一个用于快速大语言模型推理的库。由于你将模型保存为merged_16bit格式,因此可以使用VLLM。
- 安装VLLM:
pip install vllm
(VLLM的安装可能有特定的CUDA和PyTorch版本要求。请参考VLLM文档获取最新的安装先决条件。) 2. 运行VLLM的OpenAI兼容服务器: 你可以使用VLLM的OpenAI兼容API服务器来提供模型服务,这样可以轻松集成到现有应用程序中。
python -m vllm.entrypoints.openai.api_server \
--model beetlware/Bee1reason-arabic-Qwen-14B \
--tokenizer beetlware/Bee1reason-arabic-Qwen-14B \
--dtype bfloat16 \
--max-model-len 2048 \
# --tensor-parallel-size N # 如果你有多个GPU
# --gpu-memory-utilization 0.9 # 调整GPU内存使用
- 如果需要,将
--dtype bfloat16
替换为float16
。 max-model-len
应与你使用的max_seq_length
相匹配。
- 向VLLM服务器发送请求:
一旦服务器运行起来(通常在
http://localhost:8000
),你可以使用任何OpenAI兼容的客户端(如openai
库)发送请求:
import openai
client = openai.OpenAI(
base_url="http://localhost:8000/v1", # VLLM服务器地址
api_key="dummy_key" # VLLM默认不需要实际的API密钥
)
completion = client.chat.completions.create(
model="beetlware/Bee1reason-arabic-Qwen-14B", # VLLM中指定的模型名称
messages=[
{"role": "user", "content": "اشرح نظرية النسبية العامة بكلمات بسيطة."} # "用简单的语言解释广义相对论。"
],
max_tokens=256,
temperature=0.7,
stream=True # 启用流式传输
)
print("来自VLLM的流式响应:")
full_response = ""
for chunk in completion:
if chunk.choices[0].delta.content is not None:
token = chunk.choices[0].delta.content
print(token, end="", flush=True)
full_response += token
print("\n--- 流结束 ---")
✨ 主要特性
- 基于
unsloth/Qwen3-14B
构建:借助Qwen3 140亿参数基础模型的强大性能。 - 针对阿拉伯语逻辑推理进行微调:在包含阿拉伯语逻辑推理任务的数据集上进行训练。
- 对话格式:模型遵循对话格式,需要区分用户和助手角色。它在可能包含“思考步骤”(通常在
<think>...</think>
标签内)的数据上进行训练,然后再给出最终答案,这对于需要解释或复杂推理的任务非常有用。 - Unsloth高效性:在微调过程中使用了Unsloth库,实现了更快的训练速度和更低的GPU内存消耗。
- 合并的16位模型:最终权重是一个完整的float16精度模型,无需将LoRA适配器应用到单独的基础模型即可直接使用。
📦 安装指南
使用此模型,你需要安装transformers
库和vllm
库(如果你想使用VLLM进行推理):
pip install transformers
pip install vllm
📚 详细文档
训练数据
该模型主要在一个自定义的阿拉伯语逻辑推理数据集beetlware/arabic-reasoning-dataset-logic
上进行微调,该数据集可在Hugging Face Hub上获取。这个数据集包含各种类型的推理任务(演绎、归纳、溯因),每个任务包括问题文本、提议的答案以及包含思考步骤的详细解决方案。
这些数据被转换为对话格式进行训练,通常包括:
- 用户角色:包含问题文本。
- 助手角色:包含详细的解决方案,包括思考步骤(通常在
<think>...</think>
标签内),然后是最终答案。
微调细节
- 基础模型:
unsloth/Qwen3-14B
- 微调技术:LoRA(低秩自适应)
r
(秩):32lora_alpha
:32target_modules
:["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"]
lora_dropout
:0bias
:"none"
- 使用的库:Unsloth(用于高效的模型加载和PEFT应用)和Hugging Face TRL (
SFTTrainer
) - 最大序列长度 (
max_seq_length
):2048个标记 - 训练参数(来自笔记本的示例):
per_device_train_batch_size
:2gradient_accumulation_steps
:4(模拟总批次大小为8)warmup_steps
:5max_steps
:30(在笔记本中可调整以进行完整运行)learning_rate
:2e-4(建议在较长的训练运行中降低到2e-5)optim
:"adamw_8bit"
- 最终保存:将LoRA权重与基础模型合并,并以
merged_16bit
(float16)精度保存。
🔧 技术细节
该模型基于Qwen3 14B基础模型,使用LoRA技术进行微调。LoRA通过低秩矩阵分解来减少可训练参数的数量,从而提高训练效率。在微调过程中,使用了Unsloth库来优化模型加载和训练过程,减少了GPU内存的使用。最终,将LoRA权重与基础模型合并,得到一个完整的16位精度模型,可直接用于推理。
📄 许可证
本模型采用Apache 2.0许可证。
⚠️ 局限性和潜在偏差
- 数据依赖性:模型的性能高度依赖于训练数据的质量和多样性。它可能会表现出训练数据中存在的偏差。
- 推理误差:尽管针对逻辑推理进行了微调,但模型在非常复杂或不熟悉的推理任务上仍可能出错。
- 信息错误:模型可能会“虚构”或产生不正确的信息,特别是对于训练数据中未充分涵盖的主题。
- 语言能力:如果主要在阿拉伯语数据上进行训练,模型在其他语言上的能力可能有限。
ℹ️ 额外信息
- 开发者:[loai abdalslam/组织 - beetleware]
- 上传/发布日期:[2025年5月21日]
- 联系/问题反馈:[loai.abdalsalm@beetleware.com]
Beetleware公司信息
我们是一家成立于六年前的软件公司和数字转型服务提供商,总部位于沙特阿拉伯。 版权所有@2025
我们的办公室
- 沙特阿拉伯办公室
- 电话:(+966) 54 597 3282
- 邮箱:ahmed.taha@beetleware.com
- 埃及办公室
- 电话:(+2) 010 67 256 306
- 邮箱:ahmed.abullah@beetleware.com
- 阿曼办公室
- 电话:(+968) 9522 8632
上传的模型信息
- 开发者:beetlware AI团队
- 许可证:apache-2.0
- 微调自的模型:unsloth/qwen3-14b-unsloth-bnb-4bit
这个Qwen3模型使用Unsloth和Huggingface的TRL库进行训练,速度提高了2倍。



