Guchyos's picture
Update app.py
bb987ab verified
import os
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer, AutoConfig
import torch
# グローバル変数の初期化
model = None
tokenizer = None
# Hugging Face トークンの取得
HUGGING_FACE_TOKEN = os.getenv('HUGGINGFACE_TOKEN')
if not HUGGING_FACE_TOKEN:
raise ValueError("環境変数 HUGGING_FACE_TOKEN が設定されていません")
def load_model():
global model, tokenizer
if model is None:
model_name = "Guchyos/gemma-2b-elyza-task"
try:
# まずモデルの設定を読み込む
config = AutoConfig.from_pretrained(
model_name,
token=HUGGING_FACE_TOKEN,
trust_remote_code=True
)
# トークナイザーの読み込み
tokenizer = AutoTokenizer.from_pretrained(
model_name,
token=HUGGING_FACE_TOKEN,
trust_remote_code=True
)
# モデルの読み込み
model = AutoModelForCausalLM.from_pretrained(
model_name,
config=config,
torch_dtype=torch.float32,
device_map="cpu",
token=HUGGING_FACE_TOKEN,
load_in_8bit=False,
load_in_4bit=False,
trust_remote_code=True
)
# モデルを評価モードに設定
model.eval()
except Exception as e:
raise Exception(f"モデルの読み込みに失敗しました: {str(e)}")
return model, tokenizer
def predict(message, history):
try:
model, tokenizer = load_model()
prompt = f"質問: {message}\n\n回答:"
inputs = tokenizer(prompt, return_tensors="pt")
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=128,
do_sample=False,
pad_token_id=tokenizer.pad_token_id,
eos_token_id=tokenizer.eos_token_id
)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
return response.replace(prompt, "").strip()
except Exception as e:
return f"エラーが発生しました: {str(e)}"
# Gradioインターフェースの設定
demo = gr.ChatInterface(
fn=predict,
title="💬 Gemma 2 for ELYZA-tasks",
description="ELYZA-tasks-100-TV用に最適化された日本語LLMです"
)
if __name__ == "__main__":
demo.launch(share=True)