soyailabs / install_exaone_direct.py
SOY NV AI
Update: Hugging Face ๋ฐฐํฌ ์„ค์ • ๋ฐ EXAONE ํ†ตํ•ฉ ๊ฐœ์„ 
208adf4
raw
history blame
3.93 kB
"""
EXAONE-3.0-7.8B-Instruct๋ฅผ Ollama์— ์ง์ ‘ ์ถ”๊ฐ€ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ
ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
"""
import os
import subprocess
import json
import sys
# ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ๋ฅผ 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 ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜, ๊ด€๋ฆฌ ํŽ˜์ด์ง€์—์„œ ํ† ํฐ์„ ์„ค์ •ํ•ด์ฃผ์„ธ์š”.")
def create_simple_modelfile():
"""๊ฐ„๋‹จํ•œ Modelfile ์ƒ์„ฑ (๋กœ์ปฌ ๊ฒฝ๋กœ ๋Œ€์‹  ๋ชจ๋ธ ์ด๋ฆ„๋งŒ ์‚ฌ์šฉ)"""
modelfile_content = """# EXAONE-3.0-7.8B-Instruct ๋ชจ๋ธ ์„ค์ •
# ์ฐธ๊ณ : Ollama๊ฐ€ Hugging Face ๋ชจ๋ธ์„ ์ง์ ‘ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
# ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER top_k 40
PARAMETER num_ctx 4096
SYSTEM \"\"\"You are EXAONE, a helpful AI assistant developed by LG AI Research.
You can communicate in both Korean and English.\"\"\"
"""
with open("EXAONE-3.0-7.8B-Instruct.modelfile", "w", encoding="utf-8") as f:
f.write(modelfile_content)
print("[OK] Modelfile ์ƒ์„ฑ ์™„๋ฃŒ")
def check_model_availability():
"""๋ชจ๋ธ์ด ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ"""
try:
result = subprocess.run(['ollama', 'list'],
capture_output=True, text=True, timeout=5)
if 'EXAONE' in result.stdout or 'exaone' in result.stdout.lower():
print("[INFO] EXAONE ๋ชจ๋ธ์ด ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.")
return True
return False
except Exception as e:
print(f"[WARNING] ๋ชจ๋ธ ํ™•์ธ ์ค‘ ์˜ค๋ฅ˜: {e}")
return False
def main():
print("\n" + "=" * 60)
print("EXAONE-3.0-7.8B-Instruct Ollama ์ถ”๊ฐ€ ์‹œ๋„")
print("=" * 60)
# ํ† ํฐ ์„ค์ •
os.environ['HUGGINGFACE_HUB_TOKEN'] = HF_TOKEN
print(f"[OK] Hugging Face ํ† ํฐ ์„ค์ • ์™„๋ฃŒ")
# ๋ชจ๋ธ ํ™•์ธ
if check_model_availability():
print("\n๋ชจ๋ธ์ด ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.")
return
print("\nํ˜„์žฌ Ollama ๋ฒ„์ „์—์„œ๋Š” Hugging Face ๋ชจ๋ธ์„ ์ง์ ‘ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.")
print("\n๋‹ค์Œ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•ด๋ณด์„ธ์š”:")
print("\n1. Ollama๋ฅผ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธ")
print(" https://ollama.ai/download")
print("\n2. ์ˆ˜๋™์œผ๋กœ ๋ชจ๋ธ ์ •๋ณด ํ™•์ธ")
print(" ํ˜„์žฌ Ollama ๋ฒ„์ „ ํ™•์ธ: ollama --version")
print(" ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋ธ ํ™•์ธ: ollama list")
print("\n3. EXAONE ๋ชจ๋ธ์˜ GGUF ๋ฒ„์ „ ์ฐพ๊ธฐ")
print(" Hugging Face์—์„œ GGUF ํ˜•์‹์˜ ๋ชจ๋ธ์„ ์ฐพ์•„๋ณด์„ธ์š”.")
print("\n" + "=" * 60)
print("์ฐธ๊ณ : ํ˜„์žฌ Ollama 0.13.0์€ Hugging Face ๋ชจ๋ธ ์ง์ ‘ ์ง€์›์ด ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.")
print("=" * 60)
if __name__ == "__main__":
main()