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.

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.


コメント