o
    Ti4                     @   s$   d dl mZmZ G dd deZdS )   )CUDAOpBuilderinstalled_cuda_versionc                       s\   e Zd ZdZdZd fdd	Zdd Zd fd	d
	Zdd Zdd Z	dd Z
dd Z  ZS )InferenceBuilderDS_BUILD_TRANSFORMER_INFERENCEtransformer_inferenceNc                    s$   |d u r| j n|}t j|d d S )N)name)NAMEsuper__init__)selfr   	__class__ b/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/ops/op_builder/transformer_inference.pyr
      s   zInferenceBuilder.__init__c                 C   s   d| j  dS )Nz$deepspeed.ops.transformer.inference._op)r   r   r   r   r   absolute_name   s   zInferenceBuilder.absolute_nameFc                    s   zdd l }W n ty   |r| d Y dS w d}|  s\|j r\t \}}t|jj	dd }|j
dj}|dk rG|rE| d d}|dkr\|d	k sS|d	k r\|rZ| d
 d}t |oc|S )N    z?Please install torch if trying to pre-compile inference kernelsFT.   zDNVIDIA Inference is only supported on Pascal and newer architectures      z6On Ampere and higher architectures please use CUDA 11+)torchImportErrorwarningis_rocm_pytorchcudais_availabler   intversionsplitget_device_propertiesmajorr	   is_compatible)r   verboser   	cuda_okaysys_cuda_major_torch_cuda_majorcuda_capabilityr   r   r   r#      s,   



zInferenceBuilder.is_compatiblec                 C   sb   g }g }dd |D D ]}t |d dkr|| q|| qt|dkr/| d|  |S )Nc                 S   s   g | ]}| d qS )r   )r    ).0ccr   r   r   
<listcomp>/   s    z/InferenceBuilder.filter_ccs.<locals>.<listcomp>r   r   zFiltered compute capabilities )r   appendlenr   )r   ccsccs_retained
ccs_prunedr+   r   r   r   
filter_ccs,   s   zInferenceBuilder.filter_ccsc                 C   s   g dS )N)
z.csrc/transformer/inference/csrc/pt_binding.cppz'csrc/transformer/inference/csrc/gelu.cuz'csrc/transformer/inference/csrc/relu.cuz-csrc/transformer/inference/csrc/layer_norm.cuz+csrc/transformer/inference/csrc/rms_norm.cuz*csrc/transformer/inference/csrc/softmax.cuz-csrc/transformer/inference/csrc/dequantize.cuz7csrc/transformer/inference/csrc/apply_rotary_pos_emb.cuz,csrc/transformer/inference/csrc/transform.cuz0csrc/transformer/inference/csrc/pointwise_ops.cur   r   r   r   r   sources8      zInferenceBuilder.sourcesc                 C   s   |   sdgS g S )Nz-lcurand)r   r   r   r   r   extra_ldflagsF   s   zInferenceBuilder.extra_ldflagsc                 C   s   ddgS )Nz#csrc/transformer/inference/includeszcsrc/includesr   r   r   r   r   include_pathsL   r4   zInferenceBuilder.include_paths)N)F)__name__
__module____qualname__	BUILD_VARr   r
   r   r#   r2   r3   r5   r6   __classcell__r   r   r   r   r   	   s    r   N)builderr   r   r   r   r   r   r   <module>   s   