目录

IRs

PyTorch 2.0 为后端提供了两套 IR 用于接口交互:Core Aten IR 和 Prims IR。

核心 Aten IR

核心 aten 操作是构成其他操作的基础 aten 操作集合。 核心 aten IR 是完全功能性的,在这个操作集中不存在 inplace_out 的变体。 与 Prims IR 相比,核心 aten 操作会复用“native_functions.yaml”中已有的 aten 操作, 并且不会进一步将操作分解为显式的类型提升和广播操作。 此操作集旨在作为功能 IR,用于与后端进行交互。

警告

此 opset 仍在积极开发中,未来将添加更多操作。

操作符

模式

aten._adaptive_avg_pool2d

adaptive_avg_pool2d(Tensor self, SymInt[2] output_size) -> Tensor

aten._adaptive_avg_pool2d_backward

adaptive_avg_pool2d_backward(Tensor grad_output, Tensor self) -> Tensor

aten._log_softmax

_log_softmax(Tensor self, int dim, bool half_to_float) -> Tensor

aten._native_batch_norm_legit.no_stats

_native_batch_norm_legit.no_stats(Tensor input, Tensor? weight, Tensor? bias, bool training, float momentum, float eps) -> (Tensor, Tensor, Tensor)

aten._softmax

_softmax(Tensor self, int dim, bool half_to_float) -> Tensor

aten._to_copy

_to_copy(Tensor self, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None, bool non_blocking=False, MemoryFormat? memory_format=None) -> Tensor

aten.abs

abs(Tensor self) -> Tensor

aten.acos

acos(Tensor self) -> Tensor

aten.acosh

acosh(Tensor self) -> Tensor

aten.add.Scalar

add.Scalar(Tensor self, Scalar other, Scalar alpha=1) -> Tensor

aten.add.Tensor

add.Tensor(Tensor self, Tensor other, *, Scalar alpha=1) -> Tensor

aten.addmm

addmm(Tensor self, Tensor mat1, Tensor mat2, *, Scalar beta=1, Scalar alpha=1) -> Tensor

aten.alias

alias(Tensor(a) self) -> Tensor(a)

aten.amax

amax(Tensor self, int[1] dim=[], bool keepdim=False) -> Tensor

aten.amin

amin(Tensor self, int[1] dim=[], bool keepdim=False) -> Tensor

aten.arange.start_step

arange.start_step(Scalar start, Scalar end, Scalar step=1, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor

aten.argmax

argmax(Tensor self, int? dim=None, bool keepdim=False) -> Tensor

aten.argmin

argmin(Tensor self, int? dim=None, bool keepdim=False) -> Tensor

aten.as_strided

as_strided(Tensor(a) self, SymInt[] size, SymInt[] stride, SymInt? storage_offset=None) -> Tensor(a)

aten.asin

asin(Tensor self) -> Tensor

aten.asinh

asinh(Tensor self) -> Tensor

aten.atan

atan(Tensor self) -> Tensor

aten.atanh

atanh(Tensor self) -> Tensor

aten.avg_pool2d

avg_pool2d(Tensor self, int[2] kernel_size, int[2] stride=[], int[2] padding=0, bool ceil_mode=False, bool count_include_pad=True, int? divisor_override=None) -> Tensor

aten.avg_pool2d_backward

avg_pool2d_backward(Tensor grad_output, Tensor self, int[2] kernel_size, int[2] stride, int[2] padding, bool ceil_mode, bool count_include_pad, int? divisor_override) -> Tensor

aten.bitwise_and.Tensor

bitwise_and.Tensor(Tensor self, Tensor other) -> Tensor

aten.bitwise_not

按位取反(Tensor self) -> Tensor

aten.bitwise_or.Tensor

bitwise_or.Tensor(Tensor self, Tensor other) -> Tensor

aten.bitwise_xor.Tensor

按位异或.Tensor(Tensor self, Tensor other) -> Tensor

aten.bmm

bmm(Tensor self, Tensor mat2) -> Tensor

aten.cat

cat(Tensor[] tensors, int dim=0) -> Tensor

aten.clamp

clamp(Tensor self, Scalar? min=None, Scalar? max=None) -> Tensor

aten.clone

clone(Tensor self, *, MemoryFormat? memory_format=None) -> Tensor

aten.col2im

col2im(Tensor self, SymInt[2] output_size, int[2] kernel_size, int[2] dilation, int[2] padding, int[2] stride) -> Tensor

aten.constant_pad_nd

constant_pad_nd(Tensor self, SymInt[] pad, Scalar value=0) -> Tensor

aten.convolution

卷积(Tensor input, Tensor weight, Tensor? bias, int[] stride, SymInt[] padding, int[] dilation, bool transposed, SymInt[] output_padding, int groups) -> Tensor

aten.convolution_backward

convolution_backward(Tensor grad_output, Tensor input, Tensor weight, SymInt[]? bias_sizes, int[] stride, SymInt[] padding, int[] dilation, bool transposed, SymInt[] output_padding, int groups, bool[3] output_mask) -> (Tensor, Tensor, Tensor)

aten.cos

cos(Tensor self) -> Tensor

aten.cosh

cosh(Tensor self) -> Tensor

aten.div.Scalar

div.Scalar(Tensor self, Scalar other) -> Tensor

aten.div.Tensor

div.Tensor(Tensor self, Tensor other) -> Tensor

aten.embedding_dense_backward

embedding_dense_backward(Tensor grad_output, Tensor indices, SymInt num_weights, SymInt padding_idx, bool scale_grad_by_freq) -> Tensor

aten.empty_strided

empty_strided(SymInt[] size, SymInt[] stride, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor

aten.eq.Scalar

eq.Scalar(Tensor self, Scalar other) -> Tensor

aten.eq.Tensor

eq.Tensor(Tensor self, Tensor other) -> Tensor

aten.erf

erf(Tensor self) -> Tensor

aten.exp

exp(Tensor self) -> Tensor

aten.expand

expand(Tensor(a) self, SymInt[] size, *, bool implicit=False) -> Tensor(a)

aten.fill.Scalar

fill.Scalar(Tensor self, Scalar value) -> Tensor

aten.flip

flip(Tensor self, int[] dims) -> Tensor

aten.floor

floor(Tensor self) -> Tensor

aten.fmod.Tensor

fmod.Tensor(Tensor self, Tensor other) -> Tensor

aten.full

full(SymInt[] size, Scalar fill_value, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor

aten.gather

gather(Tensor self, int dim, Tensor index, *, bool sparse_grad=False) -> Tensor

aten.ge.Scalar

ge.Scalar(Tensor self, Scalar other) -> Tensor

aten.ge.Tensor

ge.Tensor(Tensor self, Tensor other) -> Tensor

aten.gelu

gelu(Tensor self, *, str approximate='none') -> Tensor

aten.grid_sampler_2d

grid_sampler_2d(Tensor input, Tensor grid, int interpolation_mode, int padding_mode, bool align_corners) -> Tensor

aten.gt.Scalar

gt.Scalar(Tensor self, Scalar other) -> Tensor

aten.gt.Tensor

gt.Tensor(Tensor self, Tensor other) -> Tensor

aten.hardtanh

hardtanh(Tensor self, Scalar min_val=-1, Scalar max_val=1) -> Tensor

aten.index_select

index_select(Tensor self, int dim, Tensor index) -> Tensor

aten.isinf

isinf(Tensor self) -> Tensor

aten.isnan

isnan(Tensor self) -> Tensor

aten.le.Scalar

le.Scalar(Tensor self, Scalar other) -> Tensor

aten.le.Tensor

le.Tensor(Tensor self, Tensor other) -> Tensor

aten.leaky_relu

leaky_relu(Tensor self, Scalar negative_slope=0.01) -> Tensor

aten.log

log(Tensor self) -> Tensor

aten.logical_and

logical_and(Tensor self, Tensor other) -> Tensor

aten.logical_not

logical_not(Tensor self) -> Tensor

aten.logical_or

logical_or(Tensor self, Tensor other) -> Tensor

aten.lt.Scalar

lt.Scalar(Tensor self, Scalar other) -> Tensor

aten.lt.Tensor

lt.Tensor(Tensor self, Tensor other) -> Tensor

aten.max.dim

max.dim(Tensor self, int dim, bool keepdim=False) -> (Tensor values, Tensor indices)

aten.max_pool2d_with_indices

max_pool2d_with_indices(Tensor self, int[2] kernel_size, int[2] stride=[], int[2] padding=0, int[2] dilation=1, bool ceil_mode=False) -> (Tensor, Tensor)

aten.max_pool2d_with_indices_backward

max_pool2d_with_indices_backward(Tensor grad_output, Tensor self, int[2] kernel_size, int[2] stride, int[2] padding, int[2] dilation, bool ceil_mode, Tensor indices) -> Tensor

aten.max_pool3d_with_indices

max_pool3d_with_indices(Tensor self, int[3] kernel_size, int[3] stride=[], int[3] padding=0, int[3] dilation=1, bool ceil_mode=False) -> (Tensor, Tensor)

aten.maximum

maximum(张量 self, 张量 other) -> 张量

aten.mean.dim

mean.dim(Tensor self, int[1]? dim, bool keepdim=False, *, ScalarType? dtype=None) -> Tensor

aten.min.dim

min.dim(Tensor self, int dim, bool keepdim=False) -> (Tensor values, Tensor indices)

aten.minimum

minimum(Tensor self, Tensor other) -> Tensor

aten.mm

mm(Tensor self, Tensor mat2) -> Tensor

aten.mul.Scalar

mul.Scalar(Tensor self, Scalar other) -> Tensor

aten.mul.Tensor

mul.Tensor(Tensor self, Tensor other) -> Tensor

aten.native_batch_norm

native_batch_norm(Tensor input, Tensor? weight, Tensor? bias, Tensor? running_mean, Tensor? running_var, bool training, float momentum, float eps) -> (Tensor, Tensor, Tensor)

aten.native_dropout

native_dropout(Tensor input, float p, bool? train) -> (Tensor, Tensor)

aten.native_group_norm

native_group_norm(Tensor input, Tensor? weight, Tensor? bias, SymInt N, SymInt C, SymInt HxW, int group, float eps) -> (Tensor, Tensor, Tensor)

aten.native_group_norm_backward

native_group_norm_backward(Tensor grad_out, Tensor input, Tensor mean, Tensor rstd, Tensor? weight, SymInt N, SymInt C, SymInt HxW, int group, bool[3] output_mask) -> (Tensor, Tensor, Tensor)

aten.native_layer_norm

native_layer_norm(Tensor input, SymInt[] normalized_shape, Tensor? weight, Tensor? bias, float eps) -> (Tensor, Tensor, Tensor)

aten.native_layer_norm_backward

native_layer_norm_backward(Tensor grad_out, Tensor input, SymInt[] normalized_shape, Tensor mean, Tensor rstd, Tensor? weight, Tensor? bias, bool[3] output_mask) -> (Tensor, Tensor, Tensor)

aten.ne.Scalar

ne.Scalar(Tensor self, Scalar other) -> Tensor

aten.ne.Tensor

ne.Tensor(Tensor self, Tensor other) -> Tensor

aten.neg

neg(Tensor self) -> Tensor

aten.nonzero

nonzero(Tensor self) -> Tensor

aten.permute

permute(Tensor(a) self, int[] dims) -> Tensor(a)

aten.pow.Tensor_Scalar

pow.Tensor_Scalar(Tensor self, Scalar exponent) -> Tensor

aten.pow.Tensor_Tensor

pow.Tensor_Tensor(Tensor self, Tensor exponent) -> Tensor

aten.reciprocal

reciprocal(Tensor self) -> Tensor

aten.reflection_pad2d

reflection_pad2d(Tensor self, SymInt[4] padding) -> Tensor

aten.relu

relu(Tensor self) -> Tensor

aten.remainder.Tensor

remainder.Tensor(Tensor self, Tensor other) -> Tensor

aten.repeat

repeat(Tensor self, SymInt[] repeats) -> Tensor

aten.replication_pad2d

replication_pad2d(Tensor self, SymInt[4] padding) -> Tensor

aten.replication_pad3d

replication_pad3d(Tensor self, SymInt[6] padding) -> Tensor

aten.rsqrt

rsqrt(Tensor self) -> Tensor

aten.scalar_tensor

scalar_tensor(Scalar s, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor

aten.scatter_add

scatter_add(Tensor self, int dim, Tensor index, Tensor src) -> Tensor

aten.scatter_reduce.two

scatter_reduce.two(Tensor self, int dim, Tensor index, Tensor src, str reduce, *, bool include_self=True) -> Tensor

aten.select.int

select.int(Tensor(a) self, int dim, SymInt index) -> Tensor(a)

aten.sigmoid

sigmoid(Tensor self) -> Tensor

aten.sign

sign(Tensor self) -> Tensor

aten.sin

sin(Tensor self) -> Tensor

aten.sinh

sinh(Tensor self) -> Tensor

aten.slice.Tensor

slice.Tensor(Tensor(a) self, int dim=0, SymInt? start=None, SymInt? end=None, SymInt step=1) -> Tensor(a)

aten.slice_scatter

slice_scatter(Tensor self, Tensor src, int dim=0, SymInt? start=None, SymInt? end=None, SymInt step=1) -> Tensor

aten.sqrt

sqrt(Tensor self) -> Tensor

aten.squeeze.dim

squeeze.dim(Tensor(a) self, int dim) -> Tensor(a)

aten.squeeze.dims

squeeze.dims(Tensor(a) self, int[] dim) -> Tensor(a)

aten.sub.Scalar

sub.Scalar(Tensor self, Scalar other, Scalar alpha=1) -> Tensor

aten.sub.Tensor

sub.Tensor(Tensor self, Tensor other, *, Scalar alpha=1) -> Tensor

aten.sum.dim_IntList

sum.dim_IntList(Tensor self, int[1]? dim, bool keepdim=False, *, ScalarType? dtype=None) -> Tensor

aten.tanh

tanh(Tensor self) -> Tensor

aten.topk

topk(Tensor self, int k, int dim=-1, bool largest=True, bool sorted=True) -> (Tensor values, Tensor indices)

aten.unsqueeze

unsqueeze(Tensor(a) self, int dim) -> Tensor(a)

aten.upsample_bilinear2d.vec

upsample_bilinear2d.vec(Tensor input, SymInt[]? output_size, bool align_corners, float[]? scale_factors) -> Tensor

aten.upsample_nearest2d.vec

upsample_nearest2d.vec(Tensor input, SymInt[]? output_size, float[]? scale_factors) -> Tensor

aten.var.dim

var.dim(Tensor self, int[1]? dim, bool unbiased=True, bool keepdim=False) -> Tensor

aten.view

view(Tensor(a) self, SymInt[] size) -> Tensor(a)

aten.where.self

where.self(Tensor condition, Tensor self, Tensor other) -> Tensor

Prims IR

Prims IR 是一组基本操作符,可以用来组合其他操作符。 Prims IR 是比核心 aten IR 更底层的操作集,并进一步将操作符分解为显式的类型提升和广播操作符:prims.convert_element_type 和 prims.broadcast_in_dim。 该操作集旨在与编译器后端进行接口交互。

警告

此 opset 仍在积极开发中,未来将添加更多操作。

操作符

模式

prims.abs

abs(Tensor self) -> Tensor

prims.acos

acos(Tensor self) -> Tensor

prims.acosh

acosh(Tensor self) -> Tensor

prims.asin

asin(Tensor self) -> Tensor

prims.asinh

asinh(Tensor self) -> Tensor

prims.atan

atan(Tensor self) -> Tensor

prims.atanh

atanh(Tensor self) -> Tensor

prims.cos

cos(Tensor self) -> Tensor

prims.cosh

cosh(Tensor self) -> Tensor

prims.bessel_i0

bessel_i0(Tensor self) -> Tensor

prims.bessel_i0e

bessel_i0e(Tensor self) -> Tensor

prims.bessel_i1

bessel_i1(Tensor self) -> Tensor

prims.bessel_i1e

bessel_i1e(Tensor self) -> Tensor

prims.bessel_j0

bessel_j0(Tensor self) -> Tensor

prims.bessel_j1

bessel_j1(Tensor self) -> Tensor

prims.bitwise_not

按位取反(Tensor self) -> Tensor

prims.cbrt

cbrt(Tensor self) -> Tensor

prims.ceil

ceil(Tensor self) -> Tensor

prims.conj_physical

conj_physical(Tensor self) -> Tensor

prims.digamma

digamma(张量 self) -> 张量

prims.erf

erf(Tensor self) -> Tensor

prims.erf_inv

erf_inv(Tensor self) -> Tensor

prims.erfc

erfc(Tensor self) -> Tensor

prims.erfcx

erfcx(Tensor self) -> Tensor

prims.exp

exp(Tensor self) -> Tensor

prims.expm1

expm1(Tensor self) -> Tensor

prims.exp2

exp2(Tensor self) -> Tensor

prims.fill

fill(Tensor self, Scalar value) -> Tensor

prims.floor

floor(Tensor self) -> Tensor

prims.imag

imag(Tensor self) -> Tensor

prims.isfinite

isfinite(Tensor self) -> Tensor

prims.lgamma

lgamma(Tensor self) -> Tensor

prims.log

log(Tensor self) -> Tensor

prims.log1p

log1p(Tensor self) -> Tensor

prims.log2

log2(Tensor self) -> Tensor

prims.log10

log10(Tensor self) -> Tensor

prims.ndtri

ndtri(Tensor self) -> Tensor

prims.neg

neg(Tensor self) -> Tensor

prims.real

real(Tensor self) -> Tensor

prims.reciprocal

reciprocal(Tensor self) -> Tensor

prims.round

round(Tensor self) -> Tensor

prims.sign

sign(Tensor self) -> Tensor

prims.signbit

signbit(Tensor self) -> Tensor

prims.sin

sin(Tensor self) -> Tensor

prims.sinh

sinh(Tensor self) -> Tensor

prims.spherical_bessel_j0

球贝塞尔函数 j0(Tensor self) -> Tensor

prims.sqrt

sqrt(Tensor self) -> Tensor

prims.tan

tan(Tensor self) -> Tensor

prims.tanh

tanh(Tensor self) -> Tensor

prims.trunc

trunc(Tensor self) -> Tensor

prims.add

add(Tensor self, Tensor other) -> Tensor

prims.atan2

atan2(Tensor self, Tensor other) -> Tensor

prims.bitwise_and

按位与运算(Tensor self, Tensor other)-> Tensor

prims.bitwise_or

按位或(Tensor self, Tensor other)-> Tensor

prims.bitwise_xor

按位异或(Tensor self, Tensor other) -> Tensor

prims.div

div(Tensor self, Tensor other) -> Tensor

prims.eq

eq(Tensor self, Tensor other) -> Tensor

prims.fmax

fmax(Tensor self, Tensor other) -> Tensor

prims.fmin

fmin(Tensor self, Tensor other) -> Tensor

prims.fmod

fmod(Tensor self, Tensor other) -> Tensor

prims.gcd

gcd(Tensor self, Tensor other) -> Tensor

prims.ge

ge(Tensor self, Tensor other) -> Tensor

prims.gt

gt(Tensor self, Tensor other) -> Tensor

prims.hypot

hypot(Tensor self, Tensor other) -> Tensor

prims.igamma

igamma(Tensor self, Tensor other) -> Tensor

prims.igammac

igammac(Tensor self, Tensor other) -> Tensor

prims.le

le(Tensor self, Tensor other) -> Tensor

prims.lt

lt(Tensor self, Tensor other) -> Tensor

prims.maximum

maximum(张量 self, 张量 other) -> 张量

prims.minimum

minimum(Tensor self, Tensor other) -> Tensor

prims.mul

mul(Tensor self, Tensor other) -> Tensor

prims.ne

ne(Tensor self, Tensor other) -> Tensor

prims.nextafter

nextafter(Tensor self, Tensor other) -> Tensor

prims.pow

pow(Tensor self, Tensor other) -> Tensor

prims.remainder

remainder(Tensor self, Tensor other) -> Tensor

prims.rsqrt

rsqrt(Tensor self) -> Tensor

prims.shift_left

shift_left(Tensor self, Tensor other) -> Tensor

prims.shift_right_arithmetic

shift_right_arithmetic(Tensor self, Tensor other) -> Tensor

prims.sub

sub(Tensor self, Tensor other) -> Tensor

prims.zeta

zeta(Tensor self, Tensor other) -> Tensor

prims.as_strided

as_strided(Tensor(a!) a, SymInt[] size, SymInt[] stride, SymInt storage_offset) -> Tensor(a!)

prims.broadcast_in_dim

broadcast_in_dim(Tensor(a) a, SymInt[] shape, int[] broadcast_dimensions) -> Tensor(a)

prims.collapse_view

collapse_view(Tensor(a) a, int start, int end) -> Tensor(a)

prims.conj

conj(Tensor(a) a) -> Tensor(a)

prims.slice

slice(Tensor(a) a, SymInt[] start_indices, SymInt[] limit_indices, SymInt[]? strides=None) -> Tensor(a)

prims.slice_in_dim

slice_in_dim(Tensor(a) a, SymInt start_index, SymInt limit_index, int stride=1, int axis=0) -> Tensor(a)

prims.split_dim

split_dim(Tensor(a) a, int dim, SymInt outer_length) -> Tensor(a)

prims.squeeze

squeeze(Tensor(a) a, int[] dimensions) -> Tensor(a)

prims.transpose

transpose(Tensor(a) a, int[] permutation) -> Tensor(a)

prims.view_of

view_of(Tensor(a) a) -> Tensor

prims.as_strided_scatter

as_strided_scatter(Tensor self, Tensor src, SymInt[] size, SymInt[] stride, SymInt storage_offset) -> Tensor

prims.cat

cat(Tensor[] tensors, int dim) -> Tensor

prims.reshape

reshape(张量 a, SymInt[] shape) -> 张量

prims.rev

rev(张量 a, int[] dims) -> 张量

prims.where

where(Tensor pred, Tensor a, Tensor b) -> Tensor

prims.clone

clone(Tensor self, *, MemoryFormat? memory_format=None) -> Tensor

prims.convert_element_type

convert_element_type(张量 a, 标量类型 dtype) -> 张量

prims.device_put

device_put(Tensor a, Device device) -> Tensor

prims.item

item(Tensor a) -> Scalar

prims.maximum_value

maximum_value(ScalarType dtype) -> Scalar

prims.minium_value

minium_value(ScalarType dtype) -> Scalar

prims.copy_strided

copy_strided(Tensor a, SymInt[] stride) -> Tensor

prims.copy_to

copy_to(Tensor(a!) a, Tensor b) -> Tensor(a!)

prims.resize

resize(Tensor(a!) a, SymInt[] shape) -> Tensor(a!)

prims.amax

amax(张量 inp, int[]? dims, *, ScalarType? output_dtype=None) -> 张量

prims.amin

amin(Tensor inp, int[]? dims, *, ScalarType? output_dtype=None) -> Tensor

prims.prod

prod(Tensor inp, int[]? dims, *, ScalarType? output_dtype=None) -> Tensor

prims.sum

sum(张量 inp, int[]? dims, *, ScalarType? output_dtype=None) -> 张量

prims.var

var(Tensor inp, int[]? dims, *, int correction, ScalarType? output_dtype=None) -> Tensor

prims.empty_strided

empty_strided(SymInt[] shape, SymInt[] strides, *, ScalarType dtype, Device device, bool requires_grad) -> Tensor

prims.scalar_tensor

scalar_tensor(Scalar s, *, ScalarType? dtype=None, Device? device=None) -> Tensor

prims.iota

iota(SymInt length, *, SymInt start, SymInt step, ScalarType dtype, Device device, bool requires_grad) -> Tensor

prims.svd

svd(张量 A, *, 布尔 full_matrices) -> (张量 U, 张量 S, 张量 Vh)

prims.normal

normal(SymInt[] shape, *, Scalar mean, Scalar std, ScalarType dtype, Device device, bool requires_grad) -> Tensor

prims.uniform

uniform(SymInt[] shape, *, Scalar low, Scalar high, ScalarType dtype, Device device) -> Tensor

prims.fft_r2c

fft_r2c(Tensor self, *, int[] dim, bool onesided) -> Tensor

prims.fft_c2c

fft_c2c(Tensor self, *, int[] dim, bool forward) -> Tensor

prims.fft_c2r

fft_c2r(Tensor self, *, int[] dim, SymInt last_dim_size) -> Tensor

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并解答您的问题

查看资源