llama源码学习·model.py[3]ROPE旋转位置编码(3)源码中的广播机制

一.源码注释

python 复制代码
def reshape_for_broadcast(freqs_cis: torch.Tensor, x: torch.Tensor):
    '''
       这个函数的目的是为了确保freqs_cis可以根据广播规则与x进行元素级别的运算,特别是在x的维度数量大于2时。
       '''
    # 获取x的维度数量
    ndim = x.ndim
    
    # 确保x至少有两个维度
    assert ndim > 1
    
    # freqs_cis的形状与x的第二和最后一个维度相匹配
    assert freqs_cis.shape == (x.shape[1], x.shape[-1])
    
    # 遍历x的每个维度,并为第二和最后一个维度保留其原始大小,而为所有其他维度赋值1。
    # 这是为了确保广播时,除了这两个特定维度外,其他所有维度都能自动扩展。
    shape = [d if i == 1 or i == ndim - 1 else 1 for i, d in enumerate(x.shape)]
    
    # 使用view函数来重塑freqs_cis的形状以匹配新的形状
    return freqs_cis.view(*shape)

二、举例说明

python 复制代码
freqs_cis = torch.randn(3,4)
print(freqs_cis.shape)

out: torch.Size(3, 4)

python 复制代码
x = torch.randn(2, 3, 4)
print(x.shape)

out: torch.Size(2, 3, 4)

python 复制代码
# 调用广播函数
reshaped_freqs_cis = reshape_for_broadcast(freqs_cis, x)
print(reshaped_freqs_cis.shape)

out: torch.Size(1, 3, 4)

python 复制代码
# 求和
s = reshaped_freqs_cis + x
print(s.shape)

out: torch.Size(2, 3, 4)

相关推荐
wulitoud1 天前
把 Claude、Codex、Gemini 的引擎换成本地模型:免费、离线、数据不出本机
人工智能·llama·claude·本地模型
goodlook01232 天前
LLaMa factory 大模型高效微调(三)
llama
福大大架构师每日一题4 天前
ollama v0.32.14正式发布:WebP 自动转码、Qwen 系统消息兼容升级与 llama.cpp、MLX 更新全解析
android·java·llama
zyl837214 天前
LLaMA‑Factory 使用条件 + 学习手册
llama
刻BITTER4 天前
让 Intel NPU 跑AI 大模型?一次 llama.cpp OpenVINO 后端的完整实测
人工智能·llama·openvino
微软技术分享5 天前
Windows 环境下 llama.cpp 编译运行指南
windows·llama
zhy295635 天前
【DNN】Llama 3.2 1B模型LORA微调与QAIRT部署
人工智能·dnn·llama
Flynt5 天前
花一下午把Qwen3.8-27B跑在本地,最坑的不是显存
开源·llm·llama
uncle_ll6 天前
Llama 3 私有化落地全栈实战:从 Ollama 极速部署到 LLaMA Factory LoRA 定制微调
llm·nlp·llama·ollama·大模型微调
DAVIED96 天前
llama.cpp 本地部署完全指南
windows·llama·wsl·llamacpp