Unverified Commit 2d0a83cf authored by Jiacheng Huang's avatar Jiacheng Huang Committed by GitHub
Browse files

Merge pull request #579 from InfiniTensor/issue/578

issue/578: 添加 `empty_like` 并在 `silu` 的参数为 `None` 时默认调用 `ntops` 的 `silu`
parent cf6dff16
name: Ruff
on: [push, pull_request]
jobs:
ruff:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: chartboost/ruff-action@v1
with:
src: './python/'
- uses: chartboost/ruff-action@v1
with:
src: './python/'
args: format --check
import contextlib import contextlib
import infinicore.nn as nn
from infinicore.device import device from infinicore.device import device
from infinicore.dtype import ( from infinicore.dtype import (
bfloat16, bfloat16,
...@@ -33,6 +34,7 @@ from infinicore.ops.rearrange import rearrange ...@@ -33,6 +34,7 @@ from infinicore.ops.rearrange import rearrange
from infinicore.tensor import ( from infinicore.tensor import (
Tensor, Tensor,
empty, empty,
empty_like,
from_blob, from_blob,
ones, ones,
strided_empty, strided_empty,
...@@ -40,12 +42,13 @@ from infinicore.tensor import ( ...@@ -40,12 +42,13 @@ from infinicore.tensor import (
zeros, zeros,
) )
from infinicore import nn as nn
__all__ = [ __all__ = [
# Modules.
"nn",
# Classes. # Classes.
"device", "device",
"dtype", "dtype",
"Tensor",
# Data Types. # Data Types.
"bfloat16", "bfloat16",
"bool", "bool",
...@@ -75,6 +78,7 @@ __all__ = [ ...@@ -75,6 +78,7 @@ __all__ = [
"matmul", "matmul",
"rearrange", "rearrange",
"empty", "empty",
"empty_like",
"from_blob", "from_blob",
"ones", "ones",
"strided_empty", "strided_empty",
......
import infinicore import infinicore
from infinicore.lib import _infinicore from infinicore.lib import _infinicore
from infinicore.tensor import Tensor
__all__ = ["causal_softmax", "rms_norm", "silu", "swiglu"] __all__ = ["causal_softmax", "rms_norm", "silu", "swiglu"]
def causal_softmax( def causal_softmax(input: Tensor, out=None) -> Tensor:
input: infinicore.Tensor, r"""Apply a causal softmax function."""
out=None
) -> infinicore.Tensor:
r"""Apply a causal softmax function.
"""
if out is None: if out is None:
return infinicore.Tensor(_infinicore.causal_softmax(input._underlying)) return Tensor(_infinicore.causal_softmax(input._underlying))
_infinicore.causal_softmax_(out._underlying, input._underlying) _infinicore.causal_softmax_(out._underlying, input._underlying)
...@@ -20,49 +17,50 @@ def causal_softmax( ...@@ -20,49 +17,50 @@ def causal_softmax(
def rms_norm( def rms_norm(
input: infinicore.Tensor, input: Tensor,
normalized_shape: list[int], normalized_shape: list[int],
weight: infinicore.Tensor, weight: Tensor,
eps: float = 1e-5, eps: float = 1e-5,
out=None *,
) -> infinicore.Tensor: out=None,
r"""Apply Root Mean Square Layer Normalization. ) -> Tensor:
""" r"""Apply Root Mean Square Layer Normalization."""
assert normalized_shape == weight.shape, "normalized_shape does not match weight.shape." assert normalized_shape == weight.shape, (
"normalized_shape does not match weight.shape."
)
if out is None: if out is None:
return infinicore.Tensor( return Tensor(_infinicore.rms_norm(input._underlying, weight._underlying, eps))
_infinicore.rms_norm(input._underlying, weight._underlying, eps)
)
_infinicore.rms_norm_(out._underlying, input._underlying, weight._underlying, eps) _infinicore.rms_norm_(out._underlying, input._underlying, weight._underlying, eps)
return out return out
def silu(input: infinicore.Tensor, inplace: bool = False, out=None) -> infinicore.Tensor: def silu(input: Tensor, inplace: bool = False, *, out=None) -> Tensor:
r"""Apply the Sigmoid Linear Unit (SiLU) function, element-wise. r"""Apply the Sigmoid Linear Unit (SiLU) function, element-wise."""
"""
if infinicore.use_ntops and input.device.type in ("cuda", "musa") and out is None:
return infinicore.ntops.torch.silu(input, inplace=inplace)
if inplace: if inplace:
_infinicore.silu_(input._underlying, input._underlying) _infinicore.silu_(input._underlying, input._underlying)
return input return input
if out is None: if out is None:
return infinicore.Tensor(_infinicore.silu(input._underlying)) return Tensor(_infinicore.silu(input._underlying))
_infinicore.silu_(out._underlying, input._underlying) _infinicore.silu_(out._underlying, input._underlying)
return out return out
def swiglu(input: infinicore.Tensor, other: infinicore.Tensor, out=None): def swiglu(input: Tensor, other: Tensor, *, out=None):
r"""Apply the Swish-Gated Linear Unit (SwiGLU) function, element-wise. r"""Apply the Swish-Gated Linear Unit (SwiGLU) function, element-wise."""
"""
if out is None: if out is None:
return infinicore.Tensor(_infinicore.swiglu(input._underlying, other._underlying)) return Tensor(_infinicore.swiglu(input._underlying, other._underlying))
_infinicore.swiglu_(out._underlying, input._underlying, other._underlying) _infinicore.swiglu_(out._underlying, input._underlying, other._underlying)
......
...@@ -77,7 +77,7 @@ class Tensor: ...@@ -77,7 +77,7 @@ class Tensor:
def debug(self, filename=None): def debug(self, filename=None):
"""Print tensor data or save to file for debugging """Print tensor data or save to file for debugging
Args: Args:
filename: Optional filename to save raw binary data. If None, prints to stdout. filename: Optional filename to save raw binary data. If None, prints to stdout.
""" """
...@@ -93,6 +93,16 @@ def empty(size, *, dtype=None, device=None, pin_memory=False): ...@@ -93,6 +93,16 @@ def empty(size, *, dtype=None, device=None, pin_memory=False):
) )
def empty_like(input, *, dtype=None, device=None):
if dtype is None:
dtype = input.dtype
if device is None:
device = input.device
return empty(input.size(), dtype=dtype, device=device)
def strided_empty(size, strides, *, dtype=None, device=None, pin_memory=False): def strided_empty(size, strides, *, dtype=None, device=None, pin_memory=False):
return Tensor( return Tensor(
_infinicore.strided_empty( _infinicore.strided_empty(
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment