Spaces:
Sleeping
Sleeping
# 必要なライブラリをインストールしておいてください | |
# 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("Nart/monolingual_abを使って、ユーザーが入力したモデル名でファインチューニング") | |
# ユーザー入力 | |
model_name = st.text_input("トレーニングするモデル名 (例: Qwen/Qwen2.5-1.5B-Instruct)") | |
dataset_name = "Nart/monolingual_ab" | |
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, split="train") # 言語を指定 | |
# トレーニング用のデータセットの準備 | |
def tokenize_function(examples): | |
return tokenizer(examples["text"], padding="max_length", truncation=True, max_length=168) | |
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=5e-5, | |
per_device_train_batch_size=8, | |
num_train_epochs=1, | |
save_steps=1_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にデプロイ完了しました!") |