File size: 3,281 Bytes
2c2a43f
 
 
59e8362
b4e040e
75b8738
fb6d698
2c2a43f
f060548
2c2a43f
 
 
 
 
 
 
 
 
 
75b8738
 
 
 
 
 
 
 
 
 
2c2a43f
54af0d0
59e8362
a8981a6
 
59e8362
 
 
 
b4e040e
75b8738
 
b4e040e
75b8738
 
 
b4e040e
 
54af0d0
 
2c2a43f
 
7d8e922
 
 
 
2c2a43f
 
 
54af0d0
 
 
f060548
54af0d0
 
 
 
 
 
2c2a43f
 
 
 
 
 
 
64807d8
f060548
64807d8
2c2a43f
64807d8
2c2a43f
f060548
2c2a43f
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import gradio as gr
import requests
import torch
from transformers import AutoModel, AutoConfig
from huggingface_hub import HfApi
import safetensors
import os

def convert_and_deploy(url, repo_id, hf_token):
    # セーフテンソルファイルをダウンロード
    response = requests.get(url)
    if response.status_code != 200:
        return "ファイルのダウンロードに失敗しました。URLを確認してください。"
    
    # ファイルを保存
    file_path = "model.safetensors"
    with open(file_path, "wb") as f:
        f.write(response.content)
    
    # ファイルの存在を確認
    if not os.path.exists(file_path):
        return "ファイルが正しく保存されませんでした。"
    
    # ファイルの内容を確認
    with open(file_path, "rb") as f:
        content = f.read(100)  # 先頭100バイトを読み込む
        if not content:
            return "ファイルが空です。"
    
    # モデルを読み込み
    try:
        # モデルの構成を取得
        model_name = repo_id.split('/')[-1]  # モデル名を取得
        config = AutoConfig.from_pretrained(model_name, token=hf_token)
        
        # モデルを構成に基づいて初期化
        model = AutoModel.from_config(config, torch_dtype=torch.float16)
        
        # セーフテンソルファイルからモデルの状態を読み込み
        with safetensors.safe_open(file_path, framework="pt") as f:
            state_dict = {k: f.get_tensor(k) for k in f.keys()}
        
        # BF16からFP16に変換
        state_dict = {k: v.to(torch.float16) for k, v in state_dict.items()}
        
        # モデルの状態を設定
        model.load_state_dict(state_dict)
    except Exception as e:
        return f"モデルの読み込みに失敗しました。エラー: {e}"
    
    # モデルをfloat16形式で保存
    try:
        model.save_pretrained(f"{model_name}_float16", torch_dtype=torch.float16)
    except Exception as e:
        return f"モデルの保存に失敗しました。エラー: {e}"
    
    # モデルをHugging Faceにデプロイ
    api = HfApi()
    try:
        api.upload_folder(
            folder_path=f"{model_name}_float16",
            repo_id=repo_id,
            token=hf_token,
            path_in_repo=f"{model_name}_float16",
            create_remote_repo=True
        )
    except Exception as e:
        return f"モデルのデプロイに失敗しました。エラー: {e}"
    
    return "モデルをfloat16に変換し、Hugging Faceにデプロイしました。"

# Gradioインターフェースの作成
iface = gr.Interface(
    fn=convert_and_deploy,
    inputs=[
        gr.Text(label="セーフテンソルURL"),
        gr.Text(label="Hugging Face リポジトリID (ユーザー名/モデル名)"),
        gr.Text(label="Hugging Face Write Token")
    ],
    outputs=gr.Text(label="結果"),
    title="モデルの変換とデプロイ",
    description="セーフテンソルURL、Hugging Face リポジトリID (ユーザー名/モデル名)、およびHugging Face Write Tokenを入力して、モデルをfloat16に変換し、Hugging Faceにデプロイします。"
)

# インターフェースの起動
iface.launch()