File size: 3,644 Bytes
8f28832
cfd58cc
8f28832
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7b9f968
8f28832
 
 
7b9f968
 
8f28832
 
 
 
 
 
 
 
 
cfd58cc
8f28832
 
cfd58cc
8f28832
 
 
 
 
 
04519dc
 
8f28832
 
d4bf04f
 
 
8f28832
 
 
04519dc
8f28832
 
 
 
 
 
 
 
 
 
 
 
d4bf04f
8f28832
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# 必要なライブラリをインストールしておいてください
# pip install streamlit transformers torch huggingface_hub datasets

import streamlit as st
from transformers import AutoModelForCausalLM, AutoTokenizer, Trainer, TrainingArguments
from huggingface_hub import HfApi, HfFolder, Repository
import torch
import os

# Streamlit App
st.title("Hugging Face Model Training App")
st.write("castorini/afriberta-corpusを使って、ユーザーが入力したモデル名でファインチューニング")

# ユーザー入力
model_name = st.text_input("トレーニングするモデル名 (例: Qwen/Qwen2.5-1.5B-Instruct)")
dataset_name = "castorini/afriberta-corpus"
hf_token = st.text_input("Hugging Face Write トークン", type="password")
repo_name = st.text_input("Hugging Faceリポジトリ名")  # ユーザーが入力できるリポジトリ名
output_dir = "./finetuned_model"

if st.button("トレーニング開始"):
    if not model_name or not hf_token or not repo_name:
        st.warning("モデル名、トークン、リポジトリ名を入力してください")
    else:
        # トークンの設定
        HfFolder.save_token(hf_token)

        # モデルとトークナイザーのロード
        st.write("モデルとトークナイザーをロード中...")
        model = AutoModelForCausalLM.from_pretrained(model_name)
        tokenizer = AutoTokenizer.from_pretrained(model_name)

        # データセットの準備(スワヒリ語)
        st.write("データセットのロード中...")
        from datasets import load_dataset
        dataset = load_dataset(dataset_name, 'swahili', split="train")  # 言語を指定

        # トレーニング用のデータセットの準備
        def tokenize_function(examples):
            return tokenizer(examples["text"], padding="max_length", truncation=True, max_length=128)

        tokenized_dataset = dataset.map(tokenize_function, batched=True)

        # input_ids と labels を一致させる(Causal LM の場合)
        tokenized_dataset = tokenized_dataset.rename_column("text", "labels")

        # 評価用データセットを使わない設定
        eval_dataset = None  # 評価を行わない場合、eval_datasetはNoneに設定

        # トレーニング設定
        training_args = TrainingArguments(
            output_dir=output_dir,
            eval_strategy="no",  # eval設定を評価しない設定
            learning_rate=2e-5,
            per_device_train_batch_size=8,
            num_train_epochs=1,
            save_steps=10_000,
            save_total_limit=2,
        )

        # トレーナーの作成
        trainer = Trainer(
            model=model,
            args=training_args,
            train_dataset=tokenized_dataset,
            eval_dataset=eval_dataset,  # 評価データセットを指定しない
        )

        # トレーニングの実行
        st.write("トレーニング開始...")
        trainer.train()

        # トレーニング済みモデルの保存
        st.write("トレーニング完了。モデルを保存中...")
        trainer.save_model(output_dir)

        # Hugging Face Hub にデプロイ
        api = HfApi()
        api.create_repo(repo_name, token=hf_token)
        repo = Repository(local_dir=output_dir, clone_from=repo_name, use_auth_token=hf_token)
        
        st.write("Hugging Face Hubにデプロイ中...")
        repo.push_to_hub(commit_message="トレーニング済みモデルをデプロイ")

        st.success(f"{repo_name}としてHugging Face Hubにデプロイ完了しました!")