o
    Ti0                     @   s,   d dl Z ddlmZmZ G dd deZdS )    N   )CUDAOpBuilderinstalled_cuda_versionc                       sd   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dd Z  ZS )RaggedOpsBuilderDS_BUILD_RAGGED_DEVICE_OPSragged_device_opsNc                    s$   |d u r| j n|}t j|d d S )N)name)NAMEsuper__init__)selfr   	__class__ W/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/ops/op_builder/ragged_ops.pyr      s   zRaggedOpsBuilder.__init__c                 C   s   d| j  S )Nz*deepspeed.inference.v2.kernels.ragged_ops.)r	   )r   r   r   r   absolute_name   s   zRaggedOpsBuilder.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 )Nr   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RaggedOpsBuilder.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>1   s    z/RaggedOpsBuilder.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RaggedOpsBuilder.filter_ccsc                 C   s   |  d}tj|rdS dS )N	deepspeedz..)deepspeed_src_pathospathisdir)r   ds_pathr   r   r   
get_prefix;   s   
zRaggedOpsBuilder.get_prefixc                    &   g d}|     fdd|D }|S )N)z.inference/v2/kernels/ragged_ops/ragged_ops.cppz=inference/v2/kernels/ragged_ops/atom_builder/atom_builder.cppz?inference/v2/kernels/ragged_ops/blocked_flash/blocked_flash.cppz/inference/v2/kernels/ragged_ops/embed/embed.cppz3inference/v2/kernels/ragged_ops/embed/embed_cuda.cuzNinference/v2/kernels/ragged_ops/linear_blocked_kv_rotary/blocked_kv_rotary.cppzRinference/v2/kernels/ragged_ops/linear_blocked_kv_rotary/blocked_kv_rotary_cuda.cuz?inference/v2/kernels/ragged_ops/logits_gather/logits_gather.cppzCinference/v2/kernels/ragged_ops/logits_gather/logits_gather_cuda.cuz;inference/v2/kernels/ragged_ops/moe_scatter/moe_scatter.cppz?inference/v2/kernels/ragged_ops/moe_scatter/moe_scatter_cuda.cuz9inference/v2/kernels/ragged_ops/moe_gather/moe_gather.cppz=inference/v2/kernels/ragged_ops/moe_gather/moe_gather_cuda.cuzHinference/v2/kernels/ragged_ops/ragged_helpers/ragged_kernel_helpers.cppz=inference/v2/kernels/ragged_ops/top_k_gating/top_k_gating.cppzAinference/v2/kernels/ragged_ops/top_k_gating/top_k_gating_cuda.cuc                       g | ]	}t j |qS r   r3   r4   joinr(   srcprefixr   r   r*   T       z,RaggedOpsBuilder.sources.<locals>.<listcomp>r7   r   sourcesr   r>   r   rC   ?   s   zRaggedOpsBuilder.sourcesc                 C   sX   dd l }| }|  }tj||}| |}d| dg}| jr*|d|  |S )Nr   z-Lz-lblockedflashz-Wl,-rpath,)		dskernelslibrary_pathr7   r3   r4   r;   r2   jit_loadr+   )r   rD   lib_pathr?   argsr   r   r   extra_ldflagsW   s   
zRaggedOpsBuilder.extra_ldflagsc                    r8   )N)zinference/v2/kernels/includeszinference/v2/kernels/ragged_opsz,inference/v2/kernels/ragged_ops/atom_builderz-inference/v2/kernels/ragged_ops/blocked_flashz%inference/v2/kernels/ragged_ops/embedz(inference/v2/kernels/ragged_ops/includesz8inference/v2/kernels/ragged_ops/linear_blocked_kv_rotaryz-inference/v2/kernels/ragged_ops/logits_gatherz*inference/v2/kernels/ragged_ops/moe_gatherz+inference/v2/kernels/ragged_ops/moe_scatterz.inference/v2/kernels/ragged_ops/ragged_helpersz,inference/v2/kernels/ragged_ops/top_k_gatingc                    r9   r   r:   r<   r>   r   r   r*   u   r@   z2RaggedOpsBuilder.include_paths.<locals>.<listcomp>rA   rB   r   r>   r   include_pathsd   s   zRaggedOpsBuilder.include_paths)N)F)__name__
__module____qualname__	BUILD_VARr	   r   r   r!   r0   r7   rC   rI   rJ   __classcell__r   r   r   r   r      s    r   )r3   builderr   r   r   r   r   r   r   <module>   s   