pybind.cpp 4.98 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
#include "cache.h"
#include "cuda_utils.h"
#include "ops.h"
#include <torch/extension.h>

PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
  // vLLM custom ops
  pybind11::module ops = m.def_submodule("ops", "vLLM custom operators");

  // Attention ops
11
12
13
14
  ops.def("paged_attention_v1", &paged_attention_v1,
          "Compute the attention between an input query and the cached "
          "keys/values using PagedAttention.");
  ops.def("paged_attention_v2", &paged_attention_v2, "PagedAttention V2.");
15
16

  // Activation ops
17
18
19
20
21
22
23
  ops.def("silu_and_mul", &silu_and_mul, "Activation function used in SwiGLU.");
  ops.def("gelu_and_mul", &gelu_and_mul,
          "Activation function used in GeGLU with `none` approximation.");
  ops.def("gelu_tanh_and_mul", &gelu_tanh_and_mul,
          "Activation function used in GeGLU with `tanh` approximation.");
  ops.def("gelu_new", &gelu_new, "GELU implementation used in GPT-2.");
  ops.def("gelu_fast", &gelu_fast, "Approximate GELU implementation.");
24
25

  // Layernorm
26
27
  ops.def("rms_norm", &rms_norm,
          "Apply Root Mean Square (RMS) Normalization to the input tensor.");
28

29
30
  ops.def("fused_add_rms_norm", &fused_add_rms_norm,
          "In-place fused Add and RMS Normalization");
31
32

  // Rotary embedding
33
34
  ops.def("rotary_embedding", &rotary_embedding,
          "Apply GPT-NeoX or GPT-J style rotary embedding to query and key");
35

36
37
38
  ops.def("batched_rotary_embedding", &batched_rotary_embedding,
          "Apply GPT-NeoX or GPT-J style rotary embedding to query and key "
          "(supports multiple loras)");
Terry's avatar
Terry committed
39

40
// Quantization ops
41
#ifndef USE_ROCM
James Fleming's avatar
James Fleming committed
42
43
  ops.def("aqlm_gemm", &aqlm_gemm, "Quantized GEMM for AQLM");
  ops.def("aqlm_dequant", &aqlm_dequant, "Decompression method for AQLM");
44
  ops.def("awq_gemm", &awq_gemm, "Quantized GEMM for AWQ");
45
46
47
48
49
50
51
52
  ops.def("marlin_gemm", &marlin_gemm,
          "Marlin (Dense) Optimized Quantized GEMM for GPTQ");
  ops.def("gptq_marlin_24_gemm", &gptq_marlin_24_gemm,
          "Marlin_24 (Sparse) Optimized Quantized GEMM for GPTQ");
  ops.def("gptq_marlin_gemm", &gptq_marlin_gemm,
          "gptq_marlin Optimized Quantized GEMM for GPTQ");
  ops.def("gptq_marlin_repack", &gptq_marlin_repack,
          "gptq_marlin repack from GPTQ");
53
  ops.def("awq_dequantize", &awq_dequantize, "Dequantization for AWQ");
54
55
56
  ops.def("cutlass_scaled_mm_dq", &cutlass_scaled_mm_dq,
          "CUTLASS w8a8 GEMM, supporting symmetric per-tensor or "
          "per-row/column quantization.");
57
#endif
58

CHU Tianxiang's avatar
CHU Tianxiang committed
59
60
  ops.def("gptq_gemm", &gptq_gemm, "Quantized GEMM for GPTQ");
  ops.def("gptq_shuffle", &gptq_shuffle, "Post processing for GPTQ");
61
  ops.def("squeezellm_gemm", &squeezellm_gemm, "Quantized GEMM for SqueezeLLM");
62
63
64
65
66
67
68
  ops.def("static_scaled_fp8_quant", &static_scaled_fp8_quant,
          "Compute FP8 quantized tensor for given scaling factor");
  ops.def("dynamic_scaled_fp8_quant", &dynamic_scaled_fp8_quant,
          "Compute FP8 quantized tensor and scaling factor");
  ops.def("moe_align_block_size", &moe_align_block_size,
          "Aligning the number of tokens to be processed by each expert such "
          "that it is divisible by the block size.");
69
70
71

  // Cache ops
  pybind11::module cache_ops = m.def_submodule("cache_ops", "vLLM cache ops");
72
73
74
75
76
77
78
79
80
81
  cache_ops.def("swap_blocks", &swap_blocks,
                "Swap in (out) the cache blocks from src to dst");
  cache_ops.def("copy_blocks", &copy_blocks,
                "Copy the cache blocks from src to dst");
  cache_ops.def("reshape_and_cache", &reshape_and_cache,
                "Reshape the key and value tensors and cache them");
  cache_ops.def("reshape_and_cache_flash", &reshape_and_cache_flash,
                "Reshape the key and value tensors and cache them");
  cache_ops.def("convert_fp8", &convert_fp8,
                "Convert the key and value cache to fp8 data type");
82
83

  // Cuda utils
84
85
86
87
  pybind11::module cuda_utils =
      m.def_submodule("cuda_utils", "vLLM cuda utils");
  cuda_utils.def("get_device_attribute", &get_device_attribute,
                 "Gets the specified device attribute.");
88

89
90
91
  cuda_utils.def("get_max_shared_memory_per_block_device_attribute",
                 &get_max_shared_memory_per_block_device_attribute,
                 "Gets the maximum shared memory per block device attribute.");
92

93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#ifndef USE_ROCM
  // Custom all-reduce kernels
  pybind11::module custom_ar = m.def_submodule("custom_ar", "custom allreduce");
  custom_ar.def("init_custom_ar", &init_custom_ar, "init_custom_ar");
  custom_ar.def("should_custom_ar", &should_custom_ar, "should_custom_ar");
  custom_ar.def("all_reduce_reg", &all_reduce_reg, "all_reduce_reg");
  custom_ar.def("all_reduce_unreg", &all_reduce_unreg, "all_reduce_unreg");
  custom_ar.def("dispose", &dispose, "dispose");
  custom_ar.def("meta_size", &meta_size, "meta_size");
  custom_ar.def("register_buffer", &register_buffer, "register_buffer");
  custom_ar.def("get_graph_buffer_ipc_meta", &get_graph_buffer_ipc_meta,
                "get_graph_buffer_ipc_meta");
  custom_ar.def("register_graph_buffers", &register_graph_buffers,
                "register_graph_buffers");
#endif
108
}