o
    5ti&	                     @   s^   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ e 	e
ZedG dd deZdS )	    N)	find_spec)register_model)HFLM)	get_dtypeipexc                       sR   e Zd ZdZ		d fddZ													dd
eddfddZ  ZS )IPEXLMzm
    using the HuggingFace transformers + optimum-intel ipex backend, can run on intel cpu and intel gpu
    returnNc                    s>   d|v r|d dksJ dt  jdd|ddi| d S )Nbackendcausalz2Currently, only IPEXModelForCausalLM is supported. )super__init__pop)selfkwargs	__class__r   O/home/ubuntu/.local/lib/python3.10/site-packages/lm_eval/models/optimum_ipex.pyr      s   


zIPEXLM.__init__mainautoF	./offload
pretrainedc              
   K   sn   t dstdddlm} |r|ni }|| j||d|||	|d |j|f|t||d|| _	d S )NoptimumzUpackage `optimum` is not installed. Please install it via `pip install optimum[ipex]`r   )IPEXModelForCausalLM
device_map)parallelizer   max_memory_per_gpumax_cpu_memoryoffload_foldergpus)revisiondtypetrust_remote_code)
r   ModuleNotFoundErroroptimum.intelr   update_get_accelerate_argsgetfrom_pretrainedr   _model)r   r   r    r!   r"   r   r   r   r   r   peftdeltaautogptq	gptqmodelr   r   model_kwargsr   r   r   _create_model!   s2   zIPEXLM._create_model)r   N)r   r   FFNNNr   NNFF)__name__
__module____qualname____doc__r   strr/   __classcell__r   r   r   r   r      s,    r   )loggingimportlib.utilr   lm_eval.api.registryr   lm_eval.models.huggingfacer   lm_eval.models.utils_hfr   	getLoggerr0   eval_loggerr   r   r   r   r   <module>   s    
