soyailabs / add_exaone_model.py
SOY NV AI
Fix Ollama communication error and update Railway PostgreSQL setup guide
ef22967
raw
history blame
5.46 kB
"""
EXAONE-3.0-7.8B-Instruct ๋ชจ๋ธ์„ Ollama์— ์ถ”๊ฐ€ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ
์‚ฌ์šฉ ๋ฐฉ๋ฒ•:
1. Hugging Face์—์„œ ๋ชจ๋ธ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
2. ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:
pip install transformers torch huggingface_hub
3. ์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:
python add_exaone_model.py
"""
import os
import subprocess
import json
from pathlib import Path
def create_ollama_modelfile():
"""Ollama Modelfile ์ƒ์„ฑ"""
# EXAONE ๋ชจ๋ธ์˜ ์‹ค์ œ ์ฑ„ํŒ… ํ…œํ”Œ๋ฆฟ ํ˜•์‹์— ๋งž์ถฐ ์ˆ˜์ •
modelfile_content = """FROM huggingface:LGAI-EXAONE/EXAONE-3.0-7.8B-Instruct
# ๋ชจ๋ธ ์„ค์ •
PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER top_k 40
PARAMETER num_ctx 4096
PARAMETER num_predict 512
# ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ
SYSTEM \"\"\"You are EXAONE, a helpful AI assistant developed by LG AI Research.
You are designed to be helpful, harmless, and honest.
You can communicate in both Korean and English.\"\"\"
# EXAONE ๋ชจ๋ธ์˜ ์ฑ„ํŒ… ํ…œํ”Œ๋ฆฟ ํ˜•์‹
# ์ฐธ๊ณ : ์‹ค์ œ ๋ชจ๋ธ์˜ ํ† ํฌ๋‚˜์ด์ € ํ…œํ”Œ๋ฆฟ์„ ํ™•์ธํ•˜์—ฌ ์กฐ์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
TEMPLATE \"\"\"{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
{{ .Response }}<|im_end|>
\"\"\"
"""
modelfile_path = Path("EXAONE-3.0-7.8B-Instruct.modelfile")
modelfile_path.write_text(modelfile_content, encoding='utf-8')
print(f"โœ… Modelfile ์ƒ์„ฑ ์™„๋ฃŒ: {modelfile_path}")
return modelfile_path
def create_ollama_model_from_huggingface():
"""Hugging Face ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ Ollama ๋ชจ๋ธ ์ƒ์„ฑ"""
print("=" * 60)
print("EXAONE-3.0-7.8B-Instruct ๋ชจ๋ธ์„ Ollama์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค")
print("=" * 60)
# ๋ฐฉ๋ฒ• 1: Modelfile ์‚ฌ์šฉ (๊ถŒ์žฅ)
print("\n[๋ฐฉ๋ฒ• 1] Modelfile์„ ์‚ฌ์šฉํ•œ ๋ชจ๋ธ ์ƒ์„ฑ")
print("-" * 60)
modelfile_path = create_ollama_modelfile()
print(f"\n๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ชจ๋ธ์„ ์ƒ์„ฑํ•˜์„ธ์š”:")
print(f" ollama create EXAONE-3.0-7.8B-Instruct -f {modelfile_path}")
# ๋ฐฉ๋ฒ• 2: ์ง์ ‘ Hugging Face์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ
print("\n[๋ฐฉ๋ฒ• 2] Hugging Face์—์„œ ์ง์ ‘ ๊ฐ€์ ธ์˜ค๊ธฐ")
print("-" * 60)
print("๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”:")
print(" ollama create EXAONE-3.0-7.8B-Instruct --from huggingface:LGAI-EXAONE/EXAONE-3.0-7.8B-Instruct")
# ๋ฐฉ๋ฒ• 3: Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜
print("\n[๋ฐฉ๋ฒ• 3] GGUF ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ ํ›„ ์ถ”๊ฐ€ (๊ณ ๊ธ‰)")
print("-" * 60)
print("์ด ๋ฐฉ๋ฒ•์€ llama.cpp๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ GGUF ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•œ ํ›„")
print("Ollama์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.")
print("\n" + "=" * 60)
print("โš ๏ธ ์ค‘์š” ์‚ฌํ•ญ:")
print("=" * 60)
print("1. Hugging Face์—์„œ ๋ชจ๋ธ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.")
print(" https://huggingface.co/LGAI-EXAONE/EXAONE-3.0-7.8B-Instruct")
print("2. Hugging Face ํ† ํฐ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.")
print(" ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์„ค์ •: export HUGGINGFACE_HUB_TOKEN=your_token")
print(" Windows PowerShell: $env:HUGGINGFACE_HUB_TOKEN='your_token'")
print("3. ๋ชจ๋ธ ํฌ๊ธฐ๊ฐ€ ์•ฝ 15GB์ด๋ฏ€๋กœ ์ถฉ๋ถ„ํ•œ ๋””์Šคํฌ ๊ณต๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.")
print("4. GPU ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ถฉ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค (์ตœ์†Œ 16GB ๊ถŒ์žฅ).")
print("=" * 60)
def check_ollama_installation():
"""Ollama ์„ค์น˜ ํ™•์ธ"""
try:
result = subprocess.run(['ollama', '--version'],
capture_output=True, text=True, timeout=5)
if result.returncode == 0:
print(f"โœ… Ollama ์„ค์น˜ ํ™•์ธ: {result.stdout.strip()}")
return True
else:
print("โŒ Ollama๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.")
return False
except FileNotFoundError:
print("โŒ Ollama๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.")
print(" ์„ค์น˜ ๋ฐฉ๋ฒ•: https://ollama.ai/download")
return False
except Exception as e:
print(f"โŒ Ollama ํ™•์ธ ์ค‘ ์˜ค๋ฅ˜: {e}")
return False
def check_huggingface_access():
"""Hugging Face ์•ก์„ธ์Šค ํ™•์ธ"""
try:
from huggingface_hub import whoami
user_info = whoami()
print(f"โœ… Hugging Face ๋กœ๊ทธ์ธ ํ™•์ธ: {user_info.get('name', 'Unknown')}")
return True
except Exception as e:
print(f"โš ๏ธ Hugging Face ๋กœ๊ทธ์ธ ํ™•์ธ ์‹คํŒจ: {e}")
print(" Hugging Face CLI๋กœ ๋กœ๊ทธ์ธํ•˜์„ธ์š”: huggingface-cli login")
return False
if __name__ == "__main__":
print("\n" + "=" * 60)
print("EXAONE-3.0-7.8B-Instruct Ollama ์ถ”๊ฐ€ ์Šคํฌ๋ฆฝํŠธ")
print("=" * 60 + "\n")
# ์‚ฌ์ „ ํ™•์ธ
ollama_ok = check_ollama_installation()
hf_ok = check_huggingface_access()
if not ollama_ok:
print("\nโš ๏ธ Ollama๋ฅผ ๋จผ์ € ์„ค์น˜ํ•ด์ฃผ์„ธ์š”.")
exit(1)
# ๋ชจ๋ธ ์ถ”๊ฐ€ ๋ฐฉ๋ฒ• ์•ˆ๋‚ด
create_ollama_model_from_huggingface()
print("\n" + "=" * 60)
print("๋‹ค์Œ ๋‹จ๊ณ„:")
print("=" * 60)
print("1. ์œ„์˜ ๋ช…๋ น์–ด ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜์—ฌ ์‹คํ–‰ํ•˜์„ธ์š”.")
print("2. ๋ชจ๋ธ ์ƒ์„ฑ์ด ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ํ™•์ธํ•˜์„ธ์š”:")
print(" ollama list")
print("3. ๋ชจ๋ธ์ด ๋ชฉ๋ก์— ๋‚˜ํƒ€๋‚˜๋ฉด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.")
print("=" * 60 + "\n")