o
    Ti"                     @   sL   zd dl mZ W n ey   dZY nw ddlmZmZ G dd deZdS )    )versionN   )CUDAOpBuilderinstalled_cuda_versionc                       sv   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edd ZedddZ  ZS )FPQuantizerBuilderDS_BUILD_FP_QUANTIZERfp_quantizerNc                    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/fp_quantizer.pyr      s   zFPQuantizerBuilder.__init__c                 C   s   d| j  dS )Nzdeepspeed.ops.fp_quantizer._op)r
   r   r   r   r   absolute_name   s   z FPQuantizerBuilder.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}zdd l}W n tys   |rp| d
 Y dS w d}	trdd |	D }
t|j t fdd|
D }n|j  	d\}dd |	D }
tfdd|
D }|r|r| d  dd d dS t |o|S )Nr   z?Please install torch if trying to pre-compile inference kernelsFT.   zDNVIDIA Inference is only supported on Ampere and newer architectures   z6On Ampere and higher architectures please use CUDA 11+zXplease install triton==2.3.0, 2.3.1 or 3.0.0 if you want to use the FP Quantizer Kernels)z2.3z3.0z3.1z3.2c                 s   s    | ]}t |V  qd S N)pkg_versionparse.0vr   r   r   	<genexpr>;       z3FPQuantizerBuilder.is_compatible.<locals>.<genexpr>c                 3   s(    | ]} j |j kp j|jkV  qd S r   majorminor)r   a)installed_tritonr   r   r   =   s     c                 s   s    | ]}| d V  qdS )r   Nsplitr   r   r   r   r   B   r   c                 3   s(    | ]} |d  kp|d kV  qdS )r   r   Nr   r   r    r   r   r   C   s   & z2FP Quantizer is using an untested triton version (z), only 2.3.)r   r   z8 and 3.0.0 are known to be compatible with these kernels)torchImportErrorwarningis_rocm_pytorchcudais_availabler   intr   r&   get_device_propertiesr!   tritonr   r   __version__allr   is_compatible)r   verboser'   	cuda_okaysys_cuda_major_torch_cuda_majorcuda_capabilityr/   allowed_versionsallowedtriton_mismatchr   )r$   r!   r"   r   r2      s`   




z FPQuantizerBuilder.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%   )r   ccr   r   r   
<listcomp>Q   s    z1FPQuantizerBuilder.filter_ccs.<locals>.<listcomp>r   r   zFiltered compute capabilities )r-   appendlenr)   )r   ccsccs_retained
ccs_prunedr<   r   r   r   
filter_ccsN   s   zFPQuantizerBuilder.filter_ccsc                 C      ddgS )Nz csrc/fp_quantizer/fp_quantize.cuz!csrc/fp_quantizer/fp_quantize.cppr   r   r   r   r   sourcesZ   s   zFPQuantizerBuilder.sourcesc                 C   s   |   sdgS g S )Nz-lcurand)r*   r   r   r   r   extra_ldflags`   s   z FPQuantizerBuilder.extra_ldflagsc                 C   rD   )Nzcsrc/fp_quantizer/includeszcsrc/includesr   r   r   r   r   include_pathsf   s   z FPQuantizerBuilder.include_pathsc                  C   s   dd l } | jS )Nr   )r'   uint8)r'   r   r   r   get_default_quant_dtypei   s   z*FPQuantizerBuilder.get_default_quant_dtypec                 C   s,   | dkrdS | dkrdS | dkrdS J d)	Nr   i     g      <@   g     @r   zGPlease specify the right quantization range for the selected precision!r   )q_bitsr   r   r   get_quant_rangen   s   z"FPQuantizerBuilder.get_quant_ranger   )F)__name__
__module____qualname__	BUILD_VARr
   r   r   r2   rC   rE   rF   rG   staticmethodrI   rM   __classcell__r   r   r   r   r      s    5
r   )	packagingr   r   r(   builderr   r   r   r   r   r   r   <module>   s   