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])

相关推荐
不懒不懒11 小时前
【基于讯飞语音识别 + DeepSeek 大模型的课堂视频智能转写与分析系统】
大模型·llm·llama·moviepy·智慧课堂·deepseek3
松☆1 天前
torchtitan-npu:在Ascend 910上从头预训练Llama-3的完整实录
llama
嗝o゚1 天前
昇腾CANN cann-recipes-infer 仓:LLaMA 推理最佳实践,从模型到服务
人工智能·llama·cann
子榆.1 天前
CANN TensorFlow适配器:当tf.matmul跑在昇腾NPU上时在底层发生了什么
人工智能·neo4j·llama
l1t2 天前
利用llama-vulkan版本测试腾讯混元Hy-MT2多语言翻译模型
人工智能·机器学习·llama
HSunR3 天前
# 2026.5 LLaMA Factory 微调模型 使用 llama.cpp 量化 Qwen3.5 模型实操文档
llama
sxjlinux3 天前
wsl中llama.cpp源码编译
llama
Jurio.3 天前
使用.py脚本下载并加载开源大模型LLMs
python·ai·llama
解局易否结局4 天前
FlashAttention 在昇腾NPU上的实现:从内存墙到IO感知
llama
Soari4 天前
性能压榨的暴力美学:深度拆解 llama.cpp,结合 GGUF 量化实测,看普通人如何用 2GB 内存硬核跑赢 7B 大模型
llama