o
    Ti                     @   s,   d dl mZmZ ddlZG dd deZdS )   )CUDAOpBuilderinstalled_cuda_version    Nc                       s`   e Zd ZdZdZd fdd	Zdd Zdd	 Zd
d Z fddZ	d fdd	Z
dd Z  ZS )EvoformerAttnBuilderDS_BUILD_EVOFORMER_ATTNevoformer_attnNc                    s2   |d u r| j n|}t j|d tjd| _d S )N)nameCUTLASS_PATH)NAMEsuper__init__osenvirongetcutlass_path)selfr   	__class__ [/home/ubuntu/.local/lib/python3.10/site-packages/deepspeed/ops/op_builder/evoformer_attn.pyr      s   zEvoformerAttnBuilder.__init__c                 C   s   d| j  dS )Nzdeepspeed.ops._op)r
   r   r   r   r   absolute_name   s   z"EvoformerAttnBuilder.absolute_namec                 C   s   |   sdgS g S )Nz-lcurand)is_rocm_pytorchr   r   r   r   extra_ldflags   s   z"EvoformerAttnBuilder.extra_ldflagsc                 C   s    d}| d| d| dgS )Nz%csrc/deepspeed4science/evoformer_attnz/attention.cppz/attention_back.cuz/attention_cu.cur   )r   src_dirr   r   r   sources   s   zEvoformerAttnBuilder.sourcesc                    sl   t   }zdd l}W n ty   | d | Y S w |jdj}|jdj}|	d| |  |S )Nr   5Please install torch if trying to pre-compile kernelsz-DGPU_ARCH=)
r   	nvcc_argstorchImportErrorwarningcudaget_device_propertiesmajorminorappend)r   argsr   r$   r%   r   r   r   r       s   

zEvoformerAttnBuilder.nvcc_argsFc                    s  zdd l }W n ty   |r| d Y dS w | jd u r&|r$| d dS tj| j dr`t| j dd}d| vrP|rG| d 	 W d    dS W d    n1 sZw   Y  n;zdd l	}W n tyw   |rt| d	 Y dS w |j
d
d d \}}t|dkot|dk}|s|r| d dS d}|  s|j rt \}	}
t|jjd
d }|jdj}|dk r|r| d d}|dk s|	dk r|r| d d}t |o|S )Nr   r   FzOPlease specify the CUTLASS repo directory as environment variable $CUTLASS_PATHz/CHANGELOG.mdrz3.1.0z#Please use CUTLASS version >= 3.1.0zBPlease pip install nvidia-cutlass if trying to pre-compile kernels.      r   T   z/Please use a GPU with compute capability >= 7.0   zPlease use CUDA 11+)r   r    r!   r   r   pathexistsopenreadcutlass__version__splitintr   r"   is_availabler   versionr#   r$   r   is_compatible)r   verboser   fr2   cutlass_majorcutlass_minorcutlass_compatible	cuda_okaysys_cuda_major_torch_cuda_majorcuda_capabilityr   r   r   r8   ,   s`   








z"EvoformerAttnBuilder.is_compatiblec                 C   s   | j  d| j  dg}|S )Nz/includez/tools/util/include)r   )r   includesr   r   r   include_paths[   s   z"EvoformerAttnBuilder.include_paths)N)F)__name__
__module____qualname__	BUILD_VARr
   r   r   r   r   r   r8   rD   __classcell__r   r   r   r   r   
   s    /r   )builderr   r   r   r   r   r   r   r   <module>   s   