soyailabs / download_exaone_model.py
SOY NV AI
Update: Hugging Face ๋ฐฐํฌ ์„ค์ • ๋ฐ EXAONE ํ†ตํ•ฉ ๊ฐœ์„ 
208adf4
raw
history blame
3.74 kB
"""
EXAONE-3.0-7.8B-Instruct ๋ชจ๋ธ์„ Hugging Face์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ 
Ollama์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ค€๋น„ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ
"""
import os
import sys
from huggingface_hub import snapshot_download, login
# ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ๋ฅผ Python ๊ฒฝ๋กœ์— ์ถ”๊ฐ€
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
def get_huggingface_token():
"""
Hugging Face ํ† ํฐ ๊ฐ€์ ธ์˜ค๊ธฐ (ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์šฐ์„ , ์—†์œผ๋ฉด DB์—์„œ)
Google API ํ‚ค ๊ด€๋ฆฌ ๋ฐฉ์‹๊ณผ ๋™์ผํ•œ ํŒจํ„ด
"""
# ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์„œ ๋จผ์ € ํ™•์ธ
token = os.getenv('HUGGINGFACE_HUB_TOKEN', '').strip()
if not token:
token = os.getenv('HF_TOKEN', '').strip()
if token:
print(f"[Hugging Face] ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์„œ ํ† ํฐ ๊ฐ€์ ธ์˜ด (๊ธธ์ด: {len(token)}์ž)")
return token
# DB์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ (์ˆœํ™˜ ์ฐธ์กฐ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์—ฌ๊ธฐ์„œ ์ž„ํฌํŠธ)
try:
from app.database import SystemConfig
token = SystemConfig.get_config('huggingface_token', '').strip()
if token:
print(f"[Hugging Face] DB์—์„œ ํ† ํฐ ๊ฐ€์ ธ์˜ด (๊ธธ์ด: {len(token)}์ž)")
return token
except Exception as e:
print(f"[Hugging Face] DB์—์„œ ํ† ํฐ ์กฐํšŒ ์‹คํŒจ (ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ): {e}")
return ''
# Hugging Face ํ† ํฐ ๊ฐ€์ ธ์˜ค๊ธฐ
HF_TOKEN = get_huggingface_token()
if not HF_TOKEN:
raise ValueError("HUGGINGFACE_HUB_TOKEN ๋˜๋Š” HF_TOKEN ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜, ๊ด€๋ฆฌ ํŽ˜์ด์ง€์—์„œ ํ† ํฐ์„ ์„ค์ •ํ•ด์ฃผ์„ธ์š”.")
MODEL_NAME = "LGAI-EXAONE/EXAONE-3.0-7.8B-Instruct"
def download_model():
"""Hugging Face์—์„œ ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ"""
print("=" * 60)
print("EXAONE-3.0-7.8B-Instruct ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ")
print("=" * 60)
# Hugging Face ๋กœ๊ทธ์ธ
try:
login(token=HF_TOKEN)
print("[OK] Hugging Face ๋กœ๊ทธ์ธ ์„ฑ๊ณต")
except Exception as e:
print(f"[ERROR] Hugging Face ๋กœ๊ทธ์ธ ์‹คํŒจ: {e}")
return False
# ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ
try:
print(f"\n๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ์‹œ์ž‘: {MODEL_NAME}")
print("์ฃผ์˜: ๋ชจ๋ธ ํฌ๊ธฐ๊ฐ€ ์•ฝ 15GB์ด๋ฏ€๋กœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...")
download_path = snapshot_download(
repo_id=MODEL_NAME,
token=HF_TOKEN,
local_dir="./models/EXAONE-3.0-7.8B-Instruct",
local_dir_use_symlinks=False
)
print(f"\n[OK] ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ์™„๋ฃŒ!")
print(f"์ €์žฅ ์œ„์น˜: {download_path}")
return True
except Exception as e:
print(f"[ERROR] ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ์‹คํŒจ: {e}")
return False
if __name__ == "__main__":
import sys
print("\n์ด ์Šคํฌ๋ฆฝํŠธ๋Š” EXAONE ๋ชจ๋ธ์„ Hugging Face์—์„œ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.")
print("๋‹ค์šด๋กœ๋“œ๋œ ๋ชจ๋ธ์€ Ollama์—์„œ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ,")
print("GGUF ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.")
print("\n์ฐธ๊ณ : Ollama๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ GGUF ํ˜•์‹์˜ ๋ชจ๋ธ๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.")
response = input("\n๊ณ„์†ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (y/n): ")
if response.lower() != 'y':
print("๋‹ค์šด๋กœ๋“œ๋ฅผ ์ทจ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค.")
sys.exit(0)
success = download_model()
if success:
print("\n" + "=" * 60)
print("๋‹ค์šด๋กœ๋“œ ์™„๋ฃŒ!")
print("=" * 60)
print("\n๋‹ค์Œ ๋‹จ๊ณ„:")
print("1. llama.cpp๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GGUF ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜")
print("2. ๋ณ€ํ™˜๋œ ๋ชจ๋ธ์„ Ollama์— ์ถ”๊ฐ€")
print("\n์ž์„ธํ•œ ๋‚ด์šฉ์€ EXAONE_์„ค์น˜_๊ฐ€์ด๋“œ.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.")
print("=" * 60)
else:
print("\n๋‹ค์šด๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.")