Combine os arquivos safetensors divididos em um único arquivo.

この記事は約7分で読めます。
スポンサーリンク

Coisas que eu quero fazer

Ao baixar um modelo do HuggingFace ou de um software similar, ele pode ser dividido em vários arquivos, como model-00001-of-00003.safetensors, model-00002-of-00003.safetensors e model-00003-of-00003.safetensors.

Como alguns aplicativos não são compatíveis com esse formato de arquivo (o StableDiffusion WebUI Forge parece não funcionar), mostrarei como combiná-los em um único arquivo.

Perceber

Alguns modelos ficaram inutilizáveis ​​mesmo depois de combinados. Não consegui determinar se o problema era com o método ou com o software e o modelo originais.

Utilize este recurso por sua conta e risco, pois pode envolver a edição do modelo.

スポンサーリンク

Preparar

Faça o download e instale o Python na página seguinte.

Download Python
The official home of the Python Programming Language
スポンサーリンク

Criando um ambiente

Crie uma pasta de trabalho no local desejado.

Abra o prompt de comando e execute o seguinte comando. (O comando a seguir é opcional, mas recomenda-se executá-lo caso não compreenda seu significado.)

python -mvenv venv
venv\scripts\activate.bat

Certifique-se de que (venv) seja adicionado como prefixo à pasta atual na linha de comando.

Depois de confirmar que está escrito (venv), execute o seguinte comando.

pip install safetensors
pip3 install torch torchvision torchaudio

A configuração do ambiente está concluída, mas não feche o prompt de comando, pois você o utilizará para executar o programa.

スポンサーリンク

Criação de código

Crie um arquivo chamado combine.py em sua pasta de trabalho com o seguinte conteúdo.

import os
import torch
from safetensors.torch import save_file, load_file

def combine_safetensors(input_dir, output_file_name="combined_model.safetensors"):
    print(f"Searching for safetensors files in: {input_dir}")

    files_to_load = sorted([f for f in os.listdir(input_dir) if f.endswith('.safetensors')])

    if not files_to_load:
        print("No .safetensors files found in the specified directory.")
        return

    print(f"Found files: {files_to_load}")

    combined_state_dict = {}
    for i, filename in enumerate(files_to_load):
        file_path = os.path.join(input_dir, filename)
        print(f"Loading part {i+1}/{len(files_to_load)}: {filename}")
        try:
            state_dict_part = load_file(file_path)
            combined_state_dict.update(state_dict_part)
            del state_dict_part
        except Exception as e:
            print(f"Error loading {filename}: {e}")
            return

    output_path = os.path.join(input_dir, output_file_name)
    print(f"Saving combined model to: {output_path}")

    try:
        save_file(combined_state_dict, output_path)
        print("Combination successful!")
    except Exception as e:
        print(f"Error saving combined file: {e}")

if __name__ == "__main__":
    input_folder = input("INPUT FOLDER: ")

    output_name = input("OUTPUT FILE: ")
    if not output_name:
        output_name = "combined_model.safetensors"
    elif not output_name.endswith('.safetensors'):
        output_name += '.safetensors'

    combine_safetensors(input_folder, output_name)
スポンサーリンク

execução

Coloque os arquivos safetensors divididos em qualquer pasta. ( Recomenda-se colocar apenas os arquivos de destino na pasta para maior clareza.)

Execute o seguinte comando no prompt de comando usado para configurar o ambiente.

Python combine.py

Quando a opção PASTA DE ENTRADA: for exibida, insira a pasta onde você colocou os arquivos divididos.

Em seguida, será exibido o ARQUIVO DE SAÍDA; portanto, insira o nome do arquivo de saída.

Após uma breve espera, os arquivos combinados serão salvos na PASTA DE ENTRADA com o nome especificado em ARQUIVO DE SAÍDA.

Se você vir a mensagem ‘ Erro ao salvar o arquivo combinado:’ e o processo falhar, libere memória fechando outros aplicativos.

スポンサーリンク

Resultado

Consegui combinar os arquivos safetensors divididos em um único arquivo.

コメント

タイトルとURLをコピーしました