�
%�g�h � �
� d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl Z d dl
Z
d dlmZm
Z
d dlmZmZ d dlZd dlmZ ddlmZ ddlmZmZ ddlmZmZmZ dd lmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& dd
l'm(Z(m)Z) ddl*m+Z+m,Z,m-Z- ddl.m/Z/m.Z. dd
l0m1Z1m2Z2 e"d�� � rd dl3Z3 ed�� � rd dl4Z4 e$d�� � rd dl5Z5 e!d�� � rd dl6Z6d dl7m8Z8 d dl9m:Z; dZ< ej= e>� � Z?d� Z@d� ZAdeeBeCf fd�ZDdejE fd�ZFdejG deHejI eBeBf fd�ZJ dedejK deCdeeBeCejI f deejG deeeCejE f d eejL d!eeMeBeMejI ejG f f fd"�ZN dfdejK d$eOd%eOd&eOfd'�ZPdgdejK d%eOfd(�ZQ G d)� d*eR� � ZSd+ejK fd,�ZTd-� ZUd.� ZVd+ej jK fd/�ZWd0� ZXdeeCejI f dejE fd1�ZY dhd+ejK deeeCejI f d2eeMeCeeCejI f f d3eOfd4�ZZ did+ejK deeeCejI f d2eeMeCeeCejI f f fd5�Z[d6eReHeCej jK f d7eMeCeBf d8eReC fd9�Z\djd:eeMeeBeCf eeBeCf f fd;�Z]dkd=eMeCeeBeCejI f f d>eCfd?�Z^d@� Z_dA� Z` dld+ejK d:eeMeeBeCf eeBeCf f d8eeReC deeeCejE f d2eeMeCeeCejI f f dBeOfdC�Zad+ej jK fdD�Zb ded+ejK d:eeMeeBeCf eeBeCf f d8eeReC deeeCejE f d2eeMeCeeCejI f f deHeReeBeCf eMeeBeCf eeBeCf f eReeBeCf eReB eMeCeBf eReReC eReC eReHeCejK f f fdE�ZcdeHeBeReC eRejK f fdF�Zd did6eReHeCejK f d7eMeCeBf dGeeBeCf d8eeReC dHeeReReC deHeeC eejK eReHeCejK f f fdI�Ze dmd+ejK d:eeMeeBeCf eeBeCf f d8eeReC deeeCejE f d2eeMeCeeCejE f f dJeOdKeOdLeOdMeOfdN�Zfd+ejK d=eMeCeeBeCejI f f fdO�ZgdjdP�Zhd+ejK fdQ�Zi dndejK d>eCdSeMeCeeCejj f f dTeeBeCejI f fdU�Zk dod+ejK dVeeCejl f d=eeMeCeeBeCejI f f dWeeeCejl f deeeCejE f dXeOdLeOdYeReC dZeOd[eOfd\�Zmdpd]eOd^efd_�Zndjd`efda�Zodej jK deOfdb�Zpe jq djdej jK dceejI fdd�� � ZrdS )q� N)�OrderedDict�defaultdict)�Optional�Union� )�AcceleratorState� )�SAFE_WEIGHTS_NAME�WEIGHTS_NAME)�AutocastKwargs�CustomDtype�DistributedType) �is_hpu_available�is_mlu_available�is_mps_available�is_musa_available�is_npu_available�is_peft_available�is_sdaa_available�is_torch_xla_available�is_xpu_available)�clear_device_cache�get_xpu_available_memory)�load_offloaded_weight�offload_weight�save_offload_index)�is_tqdm_available�tqdm)�compare_versions�is_torch_versionF)�check_device)� safe_open)� load_filezpytorch_model.bin.index.jsonc � � ddl m} t � � rddlm} t � � ot || � � |� � S )Nr )�extract_model_from_parallelr )� PeftModel)�otherr% r �peftr&