数据类型¶
TorchRec 包含了用于表示嵌入(也称为稀疏特征)的数据类型。稀疏特征通常是用于输入到嵌入表中的索引。对于给定的批次,嵌入查找索引的数量是可变的。因此,需要一个锯齿状维度来表示批次中嵌入查找索引的可变数量。
本节介绍了用于表示稀疏特征的3种TorchRec数据类型的类: JaggedTensor、KeyedJaggedTensor和KeyedTensor。
- class torchrec.sparse.jagged_tensor.JaggedTensor(*args, **kwargs)¶
表示一个(可选加权的)不规则张量。
一个JaggedTensor是一个具有不规则维度的张量,该维度的切片可能具有不同的长度。完整示例请参见KeyedJaggedTensor。
实现是 torch.jit.script-able。
注意
我们不会进行输入验证,因为这会很昂贵,你应该始终传入有效的长度、偏移量等。
- Parameters:
values (torch.Tensor) – 密集表示中的值张量。
weights (可选[torch.Tensor]) – 如果值有权重。与值形状相同的张量。
lengths (可选[torch.Tensor]) – 锯齿状切片,表示为长度。
offsets (可选[torch.Tensor]) – 锯齿状切片,表示为累积偏移量。
- device() device¶
获取JaggedTensor设备。
- Returns:
值张量的设备。
- Return type:
torch.device
- static empty(is_weighted: bool = False, device: Optional[device] = None, values_dtype: Optional[dtype] = None, weights_dtype: Optional[dtype] = None, lengths_dtype: dtype = torch.int32) JaggedTensor¶
构建一个空的JaggedTensor。
- Parameters:
is_weighted (bool) – JaggedTensor是否具有权重。
device (可选[torch.device]) – JaggedTensor 的设备。
values_dtype (可选[torch.dtype]) – 值的dtype。
weights_dtype (可选[torch.dtype]) – 权重的数据类型。
lengths_dtype (torch.dtype) – 长度的数据类型。
- Returns:
空的JaggedTensor。
- Return type:
- static from_dense(values: List[Tensor], weights: Optional[List[Tensor]] = None) JaggedTensor¶
从张量列表中构造JaggedTensor作为值,带有可选的权重。 lengths将被计算,形状为(B,),其中B是len(values),表示批量大小。
- Parameters:
values (List[torch.Tensor]) – 用于密集表示的张量列表
weights (可选[列表[torch.Tensor]]) – 如果值有权重,则与值形状相同的张量。
- Returns:
从2D密集张量创建的JaggedTensor。
- Return type:
示例:
values = [ torch.Tensor([1.0]), torch.Tensor(), torch.Tensor([7.0, 8.0]), torch.Tensor([10.0, 11.0, 12.0]), ] weights = [ torch.Tensor([1.0]), torch.Tensor(), torch.Tensor([7.0, 8.0]), torch.Tensor([10.0, 11.0, 12.0]), ] j1 = JaggedTensor.from_dense( values=values, weights=weights, ) # j1 = [[1.0], [], [7.0, 8.0], [10.0, 11.0, 12.0]]
- static from_dense_lengths(values: Tensor, lengths: Tensor, weights: Optional[Tensor] = None) JaggedTensor¶
从值和长度张量构建JaggedTensor,带有可选的权重。 注意lengths的形状仍然是(B,),其中B是批量大小。
- Parameters:
values (torch.Tensor) – 值的密集表示。
lengths (torch.Tensor) – 锯齿状切片,表示为长度。
weights (可选[torch.Tensor]) – 如果值有权重,则为一个与值形状相同的张量。
- Returns:
从2D密集张量创建的JaggedTensor。
- Return type:
- lengths() Tensor¶
获取JaggedTensor的长度。如果未计算,则从偏移量计算。
- Returns:
长度张量。
- Return type:
torch.Tensor
- lengths_or_none() Optional[Tensor]¶
获取JaggedTensor的长度。如果未计算,则返回None。
- Returns:
长度张量。
- Return type:
可选的[torch.Tensor]
- offsets() Tensor¶
获取JaggedTensor的偏移量。如果未计算,则从长度计算。
- Returns:
偏移量张量。
- Return type:
torch.Tensor
- offsets_or_none() Optional[Tensor]¶
获取JaggedTensor的偏移量。如果未计算,则返回None。
- Returns:
偏移量张量。
- Return type:
可选的[torch.Tensor]
- record_stream(stream: Stream) None¶
参见 https://pytorch.org/docs/stable/generated/torch.Tensor.record_stream.html
- to(device: device, non_blocking: bool = False) JaggedTensor¶
将JaggedTensor移动到指定的设备。
- Parameters:
device (torch.device) – 要移动到的设备。
non_blocking (bool) – 是否异步执行复制。
- Returns:
移动后的JaggedTensor。
- Return type:
- to_dense() List[Tensor]¶
构建JT值的密集表示。
- Returns:
张量列表。
- Return type:
列表[torch.Tensor]
示例:
values = torch.Tensor([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]) offsets = torch.IntTensor([0, 2, 2, 3, 4, 5, 8]) jt = JaggedTensor(values=values, offsets=offsets) values_list = jt.to_dense() # values_list = [ # torch.tensor([1.0, 2.0]), # torch.tensor([]), # torch.tensor([3.0]), # torch.tensor([4.0]), # torch.tensor([5.0]), # torch.tensor([6.0, 7.0, 8.0]), # ]
- to_dense_weights() Optional[List[Tensor]]¶
构建JT权重的密集表示。
- Returns:
张量列表,如果没有权重则为None。
- Return type:
可选[List[torch.Tensor]]
示例:
values = torch.Tensor([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]) weights = torch.Tensor([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]) offsets = torch.IntTensor([0, 2, 2, 3, 4, 5, 8]) jt = JaggedTensor(values=values, weights=weights, offsets=offsets) weights_list = jt.to_dense_weights() # weights_list = [ # torch.tensor([0.1, 0.2]), # torch.tensor([]), # torch.tensor([0.3]), # torch.tensor([0.4]), # torch.tensor([0.5]), # torch.tensor([0.6, 0.7, 0.8]), # ]
- to_padded_dense(desired_length: Optional[int] = None, padding_value: float = 0.0) Tensor¶
从形状为 (B, N,) 的 JT 值构建一个 2D 密集张量。
请注意,B 是 self.lengths() 的长度,而 N 是最长的特征长度或 desired_length。
如果 desired_length > length,我们将用 padding_value 进行填充,否则我们将选择 desired_length 处的最后一个值。
- Parameters:
desired_length (int) – 张量的长度。
padding_value (float) – 如果我们需要填充,则为填充值。
- Returns:
二维密集张量。
- Return type:
torch.Tensor
示例:
values = torch.Tensor([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]) offsets = torch.IntTensor([0, 2, 2, 3, 4, 5, 8]) jt = JaggedTensor(values=values, offsets=offsets) dt = jt.to_padded_dense( desired_length=2, padding_value=10.0, ) # dt = [ # [1.0, 2.0], # [10.0, 10.0], # [3.0, 10.0], # [4.0, 10.0], # [5.0, 10.0], # [6.0, 7.0], # ]
- to_padded_dense_weights(desired_length: Optional[int] = None, padding_value: float = 0.0) Optional[Tensor]¶
从形状为 (B, N,) 的 JT 权重构建一个 2D 密集张量。
请注意,B(批量大小)是self.lengths()的长度,而N是最长的特征长度或desired_length。
如果 desired_length > length,我们将用 padding_value 进行填充,否则我们将选择 desired_length 处的最后一个值。
类似于 to_padded_dense 但适用于 JT 的权重而不是值。
- Parameters:
desired_length (int) – 张量的长度。
padding_value (float) – 如果我们需要填充,则为填充值。
- Returns:
二维密集张量,如果没有权重则为None。
- Return type:
可选的[torch.Tensor]
示例:
values = torch.Tensor([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]) weights = torch.Tensor([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]) offsets = torch.IntTensor([0, 2, 2, 3, 4, 5, 8]) jt = JaggedTensor(values=values, weights=weights, offsets=offsets) d_wt = jt.to_padded_dense_weights( desired_length=2, padding_value=1.0, ) # d_wt = [ # [0.1, 0.2], # [1.0, 1.0], # [0.3, 1.0], # [0.4, 1.0], # [0.5, 1.0], # [0.6, 0.7], # ]
- values() Tensor¶
获取JaggedTensor的值。
- Returns:
值张量。
- Return type:
torch.Tensor
- weights() Tensor¶
获取JaggedTensor权重。如果为None,则抛出错误。
- Returns:
权重张量。
- Return type:
torch.Tensor
- weights_or_none() Optional[Tensor]¶
获取JaggedTensor权重。如果为None,则返回None。
- Returns:
权重张量。
- Return type:
可选的[torch.Tensor]
- class torchrec.sparse.jagged_tensor.KeyedJaggedTensor(*args, **kwargs)¶
表示一个(可选加权的)键控锯齿张量。
一个KeyedJaggedTensor是一个具有不规则维度的张量,该维度的切片可能具有不同的长度。在第一维度上进行键控,在最后一个维度上不规则。
实现是 torch.jit.script-able。
- Parameters:
keys (List[str]) – 指向不规则张量的键。
values (torch.Tensor) – 密集表示中的值张量。
weights (Optional[torch.Tensor]) – 如果值有权重。与值形状相同的张量。
lengths (可选[torch.Tensor]) – 锯齿状切片,表示为长度。
offsets (可选[torch.Tensor]) – 锯齿状切片,表示为累积偏移量。
stride (可选[int]) – 每批次的示例数量。
stride_per_key_per_rank (可选[列表[列表[整数]]]) – 每个键每个排名的批量大小 (示例数量),外层列表表示键,内层列表表示值。 内层列表中的每个值表示在分布式上下文中,其索引所代表的排名中的批量示例数量。
length_per_key (可选[列表[整数]]) – 每个键的起始长度。
offset_per_key (可选[列表[整数]]) – 每个键的起始偏移量和最终偏移量。
index_per_key (可选[字典[字符串, 整数]]) – 每个键的索引。
jt_dict (可选[字典[字符串, JaggedTensor]]) – 键到JaggedTensors的字典。 允许使to_dict()变得懒加载/可缓存。
inverse_indices (Optional[Tuple[List[str], torch.Tensor]]) – 用于扩展去重嵌入输出的逆索引,以支持每个键的可变步长。
示例:
# 0 1 2 <-- dim_1 # "Feature0" [V0,V1] None [V2] # "Feature1" [V3] [V4] [V5,V6,V7] # ^ # dim_0 dim_0: keyed dimension (ie. `Feature0`, `Feature1`) dim_1: optional second dimension (ie. batch size) dim_2: The jagged dimension which has slice lengths between 0-3 in the above example # We represent this data with following inputs: values: torch.Tensor = [V0, V1, V2, V3, V4, V5, V6, V7] # V == any tensor datatype weights: torch.Tensor = [W0, W1, W2, W3, W4, W5, W6, W7] # W == any tensor datatype lengths: torch.Tensor = [2, 0, 1, 1, 1, 3] # representing the jagged slice offsets: torch.Tensor = [0, 2, 2, 3, 4, 5, 8] # offsets from 0 for each jagged slice keys: List[str] = ["Feature0", "Feature1"] # correspond to each value of dim_0 index_per_key: Dict[str, int] = {"Feature0": 0, "Feature1": 1} # index for each key offset_per_key: List[int] = [0, 3, 8] # start offset for each key and final offset- static concat(kjt_list: List[KeyedJaggedTensor]) KeyedJaggedTensor¶
将一系列KeyedJaggedTensors连接成一个单一的KeyedJaggedTensor。
- Parameters:
kjt_list (List[KeyedJaggedTensor]) – 要连接的KeyedJaggedTensors列表。
- Returns:
连接的KeyedJaggedTensor。
- Return type:
- device() device¶
返回KeyedJaggedTensor的设备。
- Returns:
KeyedJaggedTensor 的设备。
- Return type:
torch.device
- static empty(is_weighted: bool = False, device: Optional[device] = None, values_dtype: Optional[dtype] = None, weights_dtype: Optional[dtype] = None, lengths_dtype: dtype = torch.int32) KeyedJaggedTensor¶
构造一个空的KeyedJaggedTensor。
- Parameters:
is_weighted (bool) – KeyedJaggedTensor 是否加权。
device (可选[torch.device]) – KeyedJaggedTensor 将被放置的设备。
values_dtype (Optional[torch.dtype]) – 值张量的数据类型。
weights_dtype (可选[torch.dtype]) – 权重张量的数据类型。
lengths_dtype (torch.dtype) – 长度张量的数据类型。
- Returns:
空的KeyedJaggedTensor。
- Return type:
- static empty_like(kjt: KeyedJaggedTensor) KeyedJaggedTensor¶
构造一个与输入KeyedJaggedTensor具有相同设备和数据类型的空KeyedJaggedTensor。
- Parameters:
kjt (KeyedJaggedTensor) – 输入的KeyedJaggedTensor。
- Returns:
空的KeyedJaggedTensor。
- Return type:
- static from_jt_dict(jt_dict: Dict[str, JaggedTensor]) KeyedJaggedTensor¶
从JaggedTensors的字典中构造一个KeyedJaggedTensor。 自动在新创建的KJT上调用kjt.sync()。
注意
此函数仅在所有JaggedTensors具有相同的“隐式”batch_size维度时才会起作用。
基本上,我们可以将JaggedTensors可视化为格式为[batch_size x variable_feature_dim]的二维张量。在这种情况下,如果我们有一些批次没有特征值,输入的JaggedTensor可以不包括任何值。
但是KeyedJaggedTensor(默认情况下)通常会填充“None”,以便存储在KeyedJaggedTensor中的所有JaggedTensors具有相同的batch_size维度。也就是说,在这种情况下,如果JaggedTensor输入没有自动为空的批次填充,此函数将出错/无法工作。
考虑以下KeyedJaggedTensor的可视化: # 0 1 2 <– dim_1 # “Feature0” [V0,V1] None [V2] # “Feature1” [V3] [V4] [V5,V6,V7] # ^ # dim_0
- Now if the input jt_dict = {
# “Feature0” [V0,V1] [V2] # “Feature1” [V3] [V4] [V5,V6,V7]
} 并且每个JaggedTensor中的“None”被省略, 那么此函数将失败,因为我们无法正确地 填充“None”,因为它在技术上不知道 在JaggedTensor中填充的正确批次/位置。
本质上,此函数推断的长度张量 将是 [2, 1, 1, 1, 3],表明变量 batch_size dim_1 违反了现有的假设/前提条件, 即 KeyedJaggedTensor 应具有固定的 batch_size 维度。
- Parameters:
jt_dict (Dict[str, JaggedTensor]) – JaggedTensors的字典。
- Returns:
构建的 KeyedJaggedTensor。
- Return type:
- static from_lengths_sync(keys: List[str], values: Tensor, lengths: Tensor, weights: Optional[Tensor] = None, stride: Optional[int] = None, stride_per_key_per_rank: Optional[List[List[int]]] = None, inverse_indices: Optional[Tuple[List[str], Tensor]] = None) KeyedJaggedTensor¶
从键、长度和偏移量列表构造一个KeyedJaggedTensor。 与from_offsets_sync相同,只是使用长度而不是偏移量。
- Parameters:
keys (List[str]) – 键的列表。
values (torch.Tensor) – 密集表示中的值张量。
lengths (torch.Tensor) – 锯齿状切片,表示为长度。
weights (Optional[torch.Tensor]) – 如果值有权重。与值形状相同的张量。
stride (可选[int]) – 每批次的示例数量。
stride_per_key_per_rank (Optional[List[List[int]]]) – 每个键每个排名的批量大小 (示例数量),外层列表表示键,内层列表表示值。
inverse_indices (Optional[Tuple[List[str], torch.Tensor]]) – 用于扩展去重嵌入输出的逆索引,以支持每个键的可变步长。
- Returns:
构建的 KeyedJaggedTensor。
- Return type:
- static from_offsets_sync(keys: List[str], values: Tensor, offsets: Tensor, weights: Optional[Tensor] = None, stride: Optional[int] = None, stride_per_key_per_rank: Optional[List[List[int]]] = None, inverse_indices: Optional[Tuple[List[str], Tensor]] = None) KeyedJaggedTensor¶
从键、值和偏移量列表构造一个KeyedJaggedTensor。
- Parameters:
keys (List[str]) – 键的列表。
values (torch.Tensor) – 密集表示中的值张量。
offsets (torch.Tensor) – 锯齿状切片,表示为累积偏移量。
weights (Optional[torch.Tensor]) – 如果值有权重。与值形状相同的张量。
stride (可选[int]) – 每批次的示例数量。
stride_per_key_per_rank (可选[列表[列表[整数]]]) – 每个键每个排名的批量大小 (示例数量),外部列表表示键,内部列表表示值。
inverse_indices (Optional[Tuple[List[str], torch.Tensor]]) – 用于扩展去重嵌入输出的逆索引,以支持每个键的可变步长。
- Returns:
构建的 KeyedJaggedTensor。
- Return type:
- index_per_key() Dict[str, int]¶
返回KeyedJaggedTensor中每个键的索引。
- Returns:
KeyedJaggedTensor 的每个键的索引。
- Return type:
Dict[str, int]
- inverse_indices() Tuple[List[str], Tensor]¶
返回KeyedJaggedTensor的逆索引。 如果逆索引为None,这将抛出错误。
- Returns:
KeyedJaggedTensor的逆索引。
- Return type:
元组[列表[str], torch.Tensor]
- inverse_indices_or_none() Optional[Tuple[List[str], Tensor]]¶
返回KeyedJaggedTensor的逆索引,如果不存在则返回None。
- Returns:
KeyedJaggedTensor的逆索引。
- Return type:
可选[元组[列表[str], torch.Tensor]]
- keys() List[str]¶
返回KeyedJaggedTensor的键。
- Returns:
KeyedJaggedTensor的键。
- Return type:
List[str]
- length_per_key() List[int]¶
返回KeyedJaggedTensor中每个键的长度。 如果每个键的长度为None,则会计算它。
- Returns:
KeyedJaggedTensor 中每个键的长度。
- Return type:
整数列表
- length_per_key_or_none() Optional[List[int]]¶
返回KeyedJaggedTensor中每个键的长度,如果尚未计算则返回None。
- Returns:
KeyedJaggedTensor 中每个键的长度。
- Return type:
整数列表
- lengths() Tensor¶
返回KeyedJaggedTensor的长度。 如果长度尚未计算,它将计算它们。
- Returns:
KeyedJaggedTensor的长度。
- Return type:
torch.Tensor
- lengths_offset_per_key() List[int]¶
返回KeyedJaggedTensor中每个键的长度偏移量。 如果每个键的长度偏移量为None,则会计算它。
- Returns:
KeyedJaggedTensor 每个键的长度偏移量。
- Return type:
整数列表
- lengths_or_none() Optional[Tensor]¶
返回KeyedJaggedTensor的长度,如果尚未计算则返回None。
- Returns:
KeyedJaggedTensor的长度。
- Return type:
torch.Tensor
- offset_per_key() List[int]¶
返回KeyedJaggedTensor的每个键的偏移量。 如果每个键的偏移量为None,则会计算它。
- Returns:
KeyedJaggedTensor 的每个键的偏移量。
- Return type:
整数列表
- offset_per_key_or_none() Optional[List[int]]¶
返回KeyedJaggedTensor的每个键的偏移量,如果尚未计算,则返回None。
- Returns:
KeyedJaggedTensor 的每个键的偏移量。
- Return type:
整数列表
- offsets() Tensor¶
返回KeyedJaggedTensor的偏移量。 如果偏移量尚未计算,它将计算它们。
- Returns:
KeyedJaggedTensor的偏移量。
- Return type:
torch.Tensor
- offsets_or_none() Optional[Tensor]¶
返回KeyedJaggedTensor的偏移量,如果尚未计算则返回None。
- Returns:
KeyedJaggedTensor的偏移量。
- Return type:
torch.Tensor
- permute(indices: List[int], indices_tensor: Optional[Tensor] = None) KeyedJaggedTensor¶
对KeyedJaggedTensor进行排列。
- Parameters:
indices (List[int]) – 索引列表。
indices_tensor (可选[torch.Tensor]) – 索引的张量。
- Returns:
置换的键控锯齿张量。
- Return type:
- record_stream(stream: Stream) None¶
参见 https://pytorch.org/docs/stable/generated/torch.Tensor.record_stream.html
- split(segments: List[int]) List[KeyedJaggedTensor]¶
将KeyedJaggedTensor拆分为一个KeyedJaggedTensor列表。
- Parameters:
segments (List[int]) – 段列表。
- Returns:
KeyedJaggedTensor的列表。
- Return type:
- stride() int¶
返回KeyedJaggedTensor的步幅。 如果步幅为None,则会计算它。
- Returns:
KeyedJaggedTensor的步幅。
- Return type:
整数
- stride_per_key() List[int]¶
返回KeyedJaggedTensor的每个键的步幅。 如果每个键的步幅为None,则会计算它。
- Returns:
KeyedJaggedTensor 的每个键的步幅。
- Return type:
整数列表
- stride_per_key_per_rank() List[List[int]]¶
返回KeyedJaggedTensor中每个键每个等级的步幅。
- Returns:
KeyedJaggedTensor 每个键每个等级的步幅。
- Return type:
列表[列表[整数]]
- sync() KeyedJaggedTensor¶
通过计算offset_per_key和length_per_key来同步KeyedJaggedTensor。
- Returns:
同步的 KeyedJaggedTensor。
- Return type:
- to(device: device, non_blocking: bool = False, dtype: Optional[dtype] = None) KeyedJaggedTensor¶
返回指定设备和数据类型的KeyedJaggedTensor副本。
- Parameters:
device (torch.device) – 复制的目标设备。
non_blocking (bool) – 是否以非阻塞方式复制张量。
dtype (可选[torch.dtype]) – 复制的期望数据类型。
- Returns:
复制的KeyedJaggedTensor。
- Return type:
- to_dict() Dict[str, JaggedTensor]¶
返回每个键的JaggedTensor字典。 结果将缓存在self._jt_dict中。
- Returns:
每个键的JaggedTensor字典。
- Return type:
Dict[str, JaggedTensor]
- unsync() KeyedJaggedTensor¶
通过清除offset_per_key和length_per_key来取消同步KeyedJaggedTensor。
- Returns:
未同步的 KeyedJaggedTensor。
- Return type:
- values() Tensor¶
返回KeyedJaggedTensor的值。
- Returns:
KeyedJaggedTensor的值。
- Return type:
torch.Tensor
- variable_stride_per_key() bool¶
返回KeyedJaggedTensor是否每个键都有可变步幅。
- Returns:
KeyedJaggedTensor 是否每个键都有可变步幅。
- Return type:
布尔
- weights() Tensor¶
返回KeyedJaggedTensor的权重。 如果weights为None,这将抛出错误。
- Returns:
KeyedJaggedTensor的权重。
- Return type:
torch.Tensor
- weights_or_none() Optional[Tensor]¶
返回KeyedJaggedTensor的权重,如果不存在则返回None。
- Returns:
KeyedJaggedTensor的权重。
- Return type:
torch.Tensor
- class torchrec.sparse.jagged_tensor.KeyedTensor(*args, **kwargs)¶
KeyedTensor 持有一个密集张量的连接列表,每个张量都可以通过一个键来访问。
键控维度可以是可变长度的(length_per_key)。 常见的用例包括存储不同维度的池化嵌入。
实现是 torch.jit.script-able。
- Parameters:
keys (List[str]) – 键的列表。
length_per_key (List[int]) – 每个键沿键维度的长度。
values (torch.Tensor) – 密集张量,通常沿关键维度连接。
key_dim (int) – 键的维度,从零开始索引 - 默认为1 (通常B是0维度)。
示例:
# kt is KeyedTensor holding # 0 1 2 # "Embedding A" [1,1] [1,1] [1,1] # "Embedding B" [2,1,2] [2,1,2] [2,1,2] # "Embedding C" [3,1,2,3] [3,1,2,3] [3,1,2,3] tensor_list = [ torch.tensor([[1,1]] * 3), torch.tensor([[2,1,2]] * 3), torch.tensor([[3,1,2,3]] * 3), ] keys = ["Embedding A", "Embedding B", "Embedding C"] kt = KeyedTensor.from_tensor_list(keys, tensor_list) kt.values() # torch.Tensor( # [ # [1, 1, 2, 1, 2, 3, 1, 2, 3], # [1, 1, 2, 1, 2, 3, 1, 2, 3], # [1, 1, 2, 1, 2, 3, 1, 2, 3], # ] # ) kt["Embedding B"] # torch.Tensor([[2, 1, 2], [2, 1, 2], [2, 1, 2]])
- device() device¶
- Returns:
值的张量设备。
- Return type:
torch.device
- static from_tensor_list(keys: List[str], tensors: List[Tensor], key_dim: int = 1, cat_dim: int = 1) KeyedTensor¶
从张量列表创建一个KeyedTensor。张量沿着cat_dim连接。键用于索引张量。
- Parameters:
keys (List[str]) – 键的列表。
tensors (List[torch.Tensor]) – 张量列表。
key_dim (int) – 键的维度,从零开始索引 - 默认为1 (通常B是0维度)。
cat_dim (int) – 沿此维度连接张量 - 默认值
- Returns:
键控张量。
- Return type:
- key_dim() int¶
- Returns:
关键维度,从零开始索引 - 通常 B 是第0维度。
- Return type:
整数
- keys() List[str]¶
- Returns:
键的列表。
- Return type:
List[str]
- length_per_key() List[int]¶
- Returns:
每个键沿键维度的长度。
- Return type:
整数列表
- offset_per_key() List[int]¶
获取每个键沿键维度的偏移量。 如果尚未计算,则计算并缓存。
- Returns:
每个键沿键维度的偏移量。
- Return type:
整数列表
- record_stream(stream: Stream) None¶
参见 https://pytorch.org/docs/stable/generated/torch.Tensor.record_stream.html
- static regroup(keyed_tensors: List[KeyedTensor], groups: List[List[str]]) List[Tensor]¶
将一组KeyedTensors重新组合成一组张量。
- Parameters:
keyed_tensors (List[KeyedTensor]) – KeyedTensors 的列表。
groups (List[List[str]]) – 键组的列表。
- Returns:
张量列表。
- Return type:
列表[torch.Tensor]
- static regroup_as_dict(keyed_tensors: List[KeyedTensor], groups: List[List[str]], keys: List[str]) Dict[str, Tensor]¶
将一组KeyedTensors重新组合成一个张量字典。
- Parameters:
keyed_tensors (List[KeyedTensor]) – KeyedTensors 的列表。
groups (List[List[str]]) – 键组的列表。
keys (List[str]) – 键的列表。
- Returns:
张量字典。
- Return type:
字典[str, torch.Tensor]
- to(device: device, non_blocking: bool = False) KeyedTensor¶
将值张量移动到指定的设备。
- Parameters:
device (torch.device) – 将值张量移动到的设备。
non_blocking (bool) – 是否异步执行操作 (默认值: False).
- Returns:
带有值张量的键控张量已移动到指定设备。
- Return type:
- to_dict() Dict[str, Tensor]¶
- Returns:
由键索引的张量字典。
- Return type:
Dict[str, torch.Tensor]
- values() Tensor¶
获取值张量。
- Returns:
密集张量,通常沿关键维度连接。
- Return type:
torch.Tensor