Spaces:
Running
Running
Fusion-LLM API 文档
模型 API
FusionMini
FusionMini 是 Fusion-LLM 的迷你模型实现。
类定义
class FusionMini(nn.Module):
"""
Fusion-LLM 迷你模型
Args:
config (FusionMiniConfig): 模型配置
"""
方法
__init__(config)
初始化 FusionMini 模型。
参数:
config(FusionMiniConfig): 模型配置对象
示例:
from models.fusion_mini import FusionMini, FusionMiniConfig
config = FusionMiniConfig(
vocab_size=1000,
hidden_size=128,
num_hidden_layers=2,
)
model = FusionMini(config)
forward(input_ids, attention_mask=None, labels=None, past_key_values=None, use_cache=False, return_dict=True)
模型前向传播。
参数:
input_ids(torch.Tensor): 输入 token IDs,形状为(batch_size, sequence_length)attention_mask(torch.Tensor, optional): 注意力掩码,形状为(batch_size, sequence_length)labels(torch.Tensor, optional): 标签,形状为(batch_size, sequence_length)past_key_values(tuple, optional): 过去的键值缓存use_cache(bool): 是否使用 KV 缓存return_dict(bool): 是否返回字典格式
返回:
- 如果
return_dict=True:返回字典,包含:loss(torch.Tensor): 损失值(如果提供了 labels)logits(torch.Tensor): 逻辑值,形状为(batch_size, sequence_length, vocab_size)past_key_values(tuple): 更新的键值缓存(如果use_cache=True)
- 如果
return_dict=False:返回元组
示例:
# 训练模式
outputs = model(
input_ids=input_ids,
labels=labels,
return_dict=True,
)
loss = outputs["loss"]
logits = outputs["logits"]
# 推理模式(使用 KV 缓存)
outputs = model(
input_ids=input_ids,
use_cache=True,
return_dict=True,
)
logits = outputs["logits"]
past_key_values = outputs["past_key_values"]
generate(input_ids, max_length=50, temperature=1.0, top_k=50, top_p=0.95)
生成文本(简易接口)。
参数:
input_ids(torch.Tensor): 输入 token IDsmax_length(int): 最大生成长度temperature(float): 温度参数top_k(int): Top-K 采样参数top_p(float): Top-P 采样参数
返回:
torch.Tensor: 生成的 token IDs
示例:
generated = model.generate(
input_ids=input_ids,
max_length=50,
temperature=0.8,
)
save_pretrained(save_directory)
保存模型和配置。
参数:
save_directory(str): 保存目录
示例:
model.save_pretrained("output/my_model")
from_pretrained(pretrained_model_name_or_path)
从预训练路径加载模型。
参数:
pretrained_model_name_or_path(str): 预训练模型路径
返回:
FusionMini: 加载的模型
示例:
model = FusionMini.from_pretrained("output/my_model")
FusionMiniConfig
FusionMiniConfig 是 FusionMini 模型的配置类。
类定义
class FusionMiniConfig(PretrainedConfig):
"""
FusionMini 模型配置
Args:
vocab_size (int): 词汇表大小
hidden_size (int): 隐藏层大小
num_hidden_layers (int): 隐藏层数量
num_attention_heads (int): 注意力头数量
intermediate_size (int): 中间层大小
max_position_embeddings (int): 最大位置编码
num_key_value_heads (int, optional): KV 头数量(用于 GQA)
window_size (int, optional): SBLA 窗口大小
...
"""
属性
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
vocab_size |
int | 50257 | 词汇表大小 |
hidden_size |
int | 768 | 隐藏层大小 |
num_hidden_layers |
int | 12 | 隐藏层数量 |
num_attention_heads |
int | 12 | 注意力头数量 |
intermediate_size |
int | 3072 | 中间层大小 |
max_position_embeddings |
int | 1024 | 最大位置编码 |
num_key_value_heads |
int | None | KV 头数量(GQA) |
window_size |
int | 16 | SBLA 窗口大小 |
方法
__init__(**kwargs)
初始化配置。
示例:
config = FusionMiniConfig(
vocab_size=1000,
hidden_size=128,
num_hidden_layers=2,
num_attention_heads=2,
)
注意力 API
SBLAttention
SBLAttention 是 SBLA(Sliding Block Latent Attention)注意力实现。
类定义
class SBLAttention(nn.Module):
"""
SBLA 注意力层
Args:
hidden_size (int): 隐藏层大小
num_heads (int): 注意力头数量
window_size (int): 窗口大小
num_key_value_heads (int, optional): KV 头数量(用于 GQA)
"""
方法
__init__(hidden_size, num_heads, window_size, num_key_value_heads=None)
初始化 SBLA 注意力层。
forward(hidden_states, attention_mask=None, past_key_value=None, use_cache=False, output_attentions=False)
前向传播。
参数:
hidden_states(torch.Tensor): 隐藏状态,形状为(batch_size, sequence_length, hidden_size)attention_mask(torch.Tensor, optional): 注意力掩码past_key_value(tuple, optional): 过去的键值缓存use_cache(bool): 是否使用 KV 缓存output_attentions(bool): 是否输出注意力权重
返回:
tuple: (output, past_key_value, attentions)
示例:
from models.sbla_attention import SBLAttention
attention = SBLAttention(
hidden_size=128,
num_heads=2,
window_size=16,
)
hidden_states = torch.randn(1, 32, 128)
output, past_key_value, _ = attention(hidden_states)
print(output.shape) # torch.Size([1, 32, 128])
Thinking Dial API
ThinkingDialProcessor
ThinkingDialProcessor 是 Thinking Dial(动态推理强度控制)处理器。
类定义
class ThinkingDialProcessor:
"""
Thinking Dial 处理器
用于处理 think token,动态控制推理强度。
"""
方法
process(text)
处理文本,注入 think token。
参数:
text(str): 输入文本(可能包含<|think_depth_N|>)
返回:
str: 处理后的文本
示例:
from models.thinking_dial import ThinkingDialProcessor
processor = ThinkingDialProcessor()
text = "<|think_depth_2|> 这是一个需要深入思考的问题。"
processed_text = processor.process(text)
print(processed_text) # 处理后的文本
get_think_depth(text)
获取 think token 的深度。
参数:
text(str): 输入文本
返回:
int: think 深度(0-3)
示例:
depth = processor.get_think_depth(text)
print(depth) # 2
量化 API
DyQuant
DyQuant 是动态混合精度量化器(4/8/16-bit)。
类定义
class DyQuant:
"""
动态混合精度量化器
支持 4-bit、8-bit、16-bit 量化。
"""
方法
quantize(model, bits=8)
量化模型。
参数:
model(nn.Module): 要量化的模型bits(int): 量化位数(4/8/16)
返回:
nn.Module: 量化后的模型
示例:
from inference.dyquant import DyQuant
quantizer = DyQuant()
quantized_model = quantizer.quantize(model, bits=8)
save(model, path)
保存量化模型。
参数:
model(nn.Module): 量化模型path(str): 保存路径
示例:
quantizer.save(quantized_model, "output/quantized_model")
load(path)
加载量化模型。
参数:
path(str): 模型路径
返回:
nn.Module: 加载的量化模型
示例:
loaded_model = quantizer.load("output/quantized_model")
训练 API
FullFinetuner
FullFinetuner 是全量微调器。
类定义
class FullFinetuner:
"""
全量微调器
用于全量微调 Fusion-LLM 模型。
"""
方法
train(model, train_dataset, eval_dataset=None, num_epochs=3, batch_size=4)
训练模型。
参数:
model(nn.Module): 要训练的模型train_dataset(Dataset): 训练数据集eval_dataset(Dataset, optional): 评估数据集num_epochs(int): 训练轮数batch_size(int): 批次大小
示例:
from train.full_finetune import FullFinetuner
finetuner = FullFinetuner()
finetuner.train(
model=model,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
num_epochs=3,
batch_size=4,
)
评估 API
ModelEvaluator
ModelEvaluator 是模型评估器。
类定义
class ModelEvaluator:
"""
模型评估器
用于评估模型性能(Perplexity、Loss、Accuracy 等)。
"""
方法
evaluate(model, eval_data, metrics=["perplexity", "loss", "accuracy"])
评估模型。
参数:
model(nn.Module): 要评估的模型eval_data(Dataset): 评估数据集metrics(List[str]): 评估指标列表
返回:
EvaluationMetrics: 评估结果
示例:
from evaluation.metrics import ModelEvaluator
evaluator = ModelEvaluator()
metrics = evaluator.evaluate(
model=model,
eval_data=eval_dataset,
metrics=["perplexity", "loss", "accuracy"],
)
print(f"Perplexity: {metrics.perplexity:.2f}")
print(f"Loss: {metrics.loss:.4f}")
print(f"Accuracy: {metrics.accuracy:.4f}")
部署 API
OllamaDeployer
OllamaDeployer 是 Ollama 部署器。
类定义
class OllamaDeployer:
"""
Ollama 部署器
用于将 Fusion-LLM 模型部署到 Ollama。
"""
方法
deploy(model_path, output_path)
部署模型到 Ollama。
参数:
model_path(str): 模型路径output_path(str): 输出路径
示例:
from inference.ollama_deploy_v2 import OllamaDeployer
deployer = OllamaDeployer()
deployer.deploy(
model_path="output/real_model",
output_path="output/ollama_model",
)
数据集 API
TextDataset
TextDataset 是文本数据集。
类定义
class TextDataset(Dataset):
"""
文本数据集
用于加载文本数据并进行编码。
"""
方法
__init__(tokenizer, file_path, block_size=128)
初始化数据集。
参数:
tokenizer: Tokenizerfile_path(str): 文件路径block_size(int): 块大小
示例:
from torch.utils.data import Dataset
class TextDataset(Dataset):
def __init__(self, tokenizer, file_path, block_size=128):
# ...
pass
完整示例
训练完整流程
import torch
from models.fusion_mini import FusionMini, FusionMiniConfig
from train.full_finetune import FullFinetuner
from evaluation.metrics import ModelEvaluator
# 1. 创建模型
config = FusionMiniConfig(
vocab_size=1000,
hidden_size=128,
num_hidden_layers=2,
)
model = FusionMini(config)
# 2. 创建训练器
finetuner = FullFinetuner()
# 3. 训练
finetuner.train(
model=model,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
num_epochs=3,
batch_size=4,
)
# 4. 评估
evaluator = ModelEvaluator()
metrics = evaluator.evaluate(
model=model,
eval_data=eval_dataset,
)
print(f"Perplexity: {metrics.perplexity:.2f}")
print(f"Loss: {metrics.loss:.4f}")
推理完整流程
import torch
from models.fusion_mini import FusionMini
# 1. 加载模型
model = FusionMini.from_pretrained("output/real_model")
model.eval()
# 2. 创建输入
input_ids = torch.tensor([[1, 2, 3, 4, 5]])
# 3. 推理
with torch.no_grad():
outputs = model(
input_ids=input_ids,
return_dict=True,
)
logits = outputs["logits"]
print(f"Logits shape: {logits.shape}")
# 4. 生成
generated = model.generate(
input_ids=input_ids,
max_length=50,
)
print(f"Generated: {generated}")
常见问题
1. 如何自定义模型配置?
使用 FusionMiniConfig:
config = FusionMiniConfig(
vocab_size=2000, # 更大的词汇表
hidden_size=256, # 更大的隐藏层
num_hidden_layers=4, # 更深的模型
num_attention_heads=4, # 更多的注意力头
)
2. 如何使用 GQA?
在配置中设置 num_key_value_heads:
config = FusionMiniConfig(
num_attention_heads=8, # 8 个查询头
num_key_value_heads=2, # 2 个 KV 头(GQA)
)
3. 如何启用 KV 缓存?
在推理时使用 use_cache=True:
outputs = model(
input_ids=input_ids,
use_cache=True,
return_dict=True,
)
past_key_values = outputs["past_key_values"]
4. 如何量化模型?
使用 DyQuant:
from inference.dyquant import DyQuant
quantizer = DyQuant()
quantized_model = quantizer.quantize(model, bits=8)
许可证
Fusion-LLM API 文档采用 Apache 2.0 许可证。