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

相关推荐
zhangfeng113312 小时前
LLaMA Factory 完全支自定义词库(包括自定义微调数据集、自定义领域词汇/词表)
人工智能·llama
小毅&Nora14 小时前
【人工智能】【大模型】从厨房到实验室:解密LLaMA架构如何重塑大模型世界
人工智能·架构·llama
kimi-2221 天前
LLaMA Factory: 一站式大模型高效微调平台
llama
码界奇点3 天前
基于Wails框架的Ollama模型桌面管理系统设计与实现
go·毕业设计·llama·源代码管理
独隅4 天前
Ollama for macOS 完全指南:零配置本地运行 Llama、DeepSeek 等大模型,私享安全高效的 AI 能力
安全·macos·llama
skywalk81634 天前
使用llama.cpp和ollama推理LFM2.5-1.2B模型
llama·ollama·lfm2.5-1.2b
GatiArt雷4 天前
基于LLaMA 3微调的行业知识库问答系统搭建与实践
llama
wangqiaowq5 天前
llama.cpp + llama-server 的安装部署验证
运维·服务器·llama
upp5 天前
pyqt5 5.15.9和llama-cpp-python 0.3.16 初始化大模型报错解决
python·qt·llama
chem41117 天前
玩客云 边缘AI模型 本地搭建部署 llama.cpp qwen
linux·人工智能·llama