chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# ruff: noqa: RUF005
|
||||
"""Utilities to construct matmul workloads."""
|
||||
|
||||
import tvm
|
||||
from tvm.script import relax as R
|
||||
from tvm.script.ir_builder import IRBuilder
|
||||
from tvm.script.ir_builder import relax as relax_builder
|
||||
|
||||
|
||||
def get_relax_matmul_module(
|
||||
x_shape,
|
||||
y_shape,
|
||||
in_dtype,
|
||||
out_dtype=None,
|
||||
transposed_y=False,
|
||||
bias_shape=None,
|
||||
activation=None,
|
||||
residual_bin_op=None,
|
||||
residual_activation=None,
|
||||
):
|
||||
"""Create a matmul op followd by epilogue operations."""
|
||||
out_dtype = out_dtype if out_dtype is not None else in_dtype
|
||||
with IRBuilder() as builder:
|
||||
with relax_builder.function():
|
||||
R.func_name("main")
|
||||
x = R.arg("x", R.Tensor(x_shape, in_dtype))
|
||||
y = R.arg("y", R.Tensor(y_shape, in_dtype))
|
||||
if bias_shape is not None:
|
||||
bias = R.arg("bias", R.Tensor(bias_shape, out_dtype))
|
||||
|
||||
with R.dataflow() as frame:
|
||||
if transposed_y:
|
||||
axes = list(range(len(y_shape) - 2)) + [-1, -2]
|
||||
y = R.emit(R.permute_dims(y, axes=axes))
|
||||
result = R.emit(R.matmul(x, y, out_dtype=out_dtype))
|
||||
if bias_shape is not None:
|
||||
result = R.emit(result + bias)
|
||||
if activation is not None:
|
||||
result = R.emit(activation(result))
|
||||
if residual_bin_op is not None:
|
||||
result = R.emit(residual_bin_op(result, x))
|
||||
if residual_activation is not None:
|
||||
result = R.emit(residual_activation(result))
|
||||
R.output(result)
|
||||
|
||||
R.func_ret_value(frame.output_vars[0])
|
||||
|
||||
func = builder.get()
|
||||
return tvm.IRModule({"main": func})
|
||||
Reference in New Issue
Block a user