o
    Ti
                     @   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 )RaggedUtilsBuilderDS_BUILD_RAGGED_OPS
ragged_opsNc                    s$   |d u r| j n|}t j|d d S )N)name)NAMEsuper__init__)selfr   	__class__ Y/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/ops/op_builder/ragged_utils.pyr      s   zRaggedUtilsBuilder.__init__c                 C   s   d| j  S )Nzdeepspeed.inference.v2.)r	   r   r   r   r   absolute_name   s   z RaggedUtilsBuilder.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 RaggedUtilsBuilder.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    z1RaggedUtilsBuilder.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RaggedUtilsBuilder.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RaggedUtilsBuilder.get_prefixc                    s&   ddg}|     fdd|D }|S )Nz,inference/v2/ragged/csrc/fast_host_buffer.cuz'inference/v2/ragged/csrc/ragged_ops.cppc                       g | ]	}t j |qS r   r4   r5   join)r)   srcprefixr   r   r+   E       z.RaggedUtilsBuilder.sources.<locals>.<listcomp>r8   )r   sourcesr   r=   r   rA   >   s   zRaggedUtilsBuilder.sourcesc                 C   s   g S Nr   r   r   r   r   extra_ldflagsH   s   z RaggedUtilsBuilder.extra_ldflagsc                    s&   ddg}|     fdd|D }|S )Nzinference/v2/ragged/includeszinference/v2/kernels/includesc                    r9   r   r:   )r)   include_dirr=   r   r   r+   N   r?   z4RaggedUtilsBuilder.include_paths.<locals>.<listcomp>r@   )r   include_dirsincludesr   r=   r   include_pathsK   s   z RaggedUtilsBuilder.include_pathsrB   )F)__name__
__module____qualname__	BUILD_VARr	   r   r   r"   r1   r8   rA   rC   rG   __classcell__r   r   r   r   r      s    
r   )r4   builderr   r   r   r   r   r   r   <module>   s   