|
|
""" |
|
|
EXAONE-3.0-7.8B-Instruct ๋ชจ๋ธ์ Hugging Face์์ ๋ค์ด๋ก๋ํ๊ณ |
|
|
Ollama์์ ์ฌ์ฉํ ์ ์๋๋ก ์ค๋นํ๋ ์คํฌ๋ฆฝํธ |
|
|
""" |
|
|
|
|
|
import os |
|
|
import sys |
|
|
from huggingface_hub import snapshot_download, login |
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
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 '' |
|
|
|
|
|
|
|
|
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) |
|
|
|
|
|
|
|
|
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๋ค์ด๋ก๋์ ์คํจํ์ต๋๋ค.") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|