lily_fast_api / huggingface_cloud_setup.py
gbrabbit's picture
Fresh start for HF Spaces deployment
526927a
raw
history blame
6.42 kB
#!/usr/bin/env python3
"""
Hugging Face ํด๋ผ์šฐ๋“œ GPU ํ™˜๊ฒฝ ์„ค์ •
"""
import os
import requests
import json
import logging
from huggingface_hub import login, HfApi
from transformers import AutoTokenizer, AutoModelForCausalLM
# ๋กœ๊น… ์„ค์ •
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class HuggingFaceCloudSetup:
"""Hugging Face ํด๋ผ์šฐ๋“œ GPU ์„ค์ • ํด๋ž˜์Šค"""
def __init__(self):
"""์ดˆ๊ธฐํ™”"""
self.api = None
self.model_name = "heegyu/polyglot-ko-5.8b-chat"
self.space_name = "lily-math-rag"
def setup_huggingface_login(self):
"""Hugging Face ๋กœ๊ทธ์ธ ์„ค์ •"""
logger.info("๐Ÿ” Hugging Face ๋กœ๊ทธ์ธ ์„ค์ •")
try:
# ํ† ํฐ ์ž…๋ ฅ ์š”์ฒญ
token = input("Hugging Face ํ† ํฐ์„ ์ž…๋ ฅํ•˜์„ธ์š”: ").strip()
if token:
login(token)
self.api = HfApi(token=token)
logger.info("โœ… Hugging Face ๋กœ๊ทธ์ธ ์„ฑ๊ณต")
return True
else:
logger.error("โŒ ํ† ํฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค")
return False
except Exception as e:
logger.error(f"โŒ Hugging Face ๋กœ๊ทธ์ธ ์‹คํŒจ: {e}")
return False
def create_inference_endpoint(self):
"""์ถ”๋ก  ์—”๋“œํฌ์ธํŠธ ์ƒ์„ฑ"""
logger.info("๐Ÿš€ ์ถ”๋ก  ์—”๋“œํฌ์ธํŠธ ์ƒ์„ฑ ์ค‘...")
try:
# ์—”๋“œํฌ์ธํŠธ ์„ค์ •
endpoint_config = {
"account": "your-username", # Hugging Face ์‚ฌ์šฉ์ž๋ช…
"name": "lily-math-rag-endpoint",
"repository": self.model_name,
"framework": "pytorch",
"accelerator": "gpu",
"instance_type": "gpu.t4.medium", # GPU ์ธ์Šคํ„ด์Šค ํƒ€์ž…
"region": "us-east-1",
"vendor": "aws"
}
logger.info("โœ… ์—”๋“œํฌ์ธํŠธ ์„ค์ • ์™„๋ฃŒ")
logger.info(f" ๋ชจ๋ธ: {self.model_name}")
logger.info(f" GPU: {endpoint_config['instance_type']}")
logger.info(f" ์ง€์—ญ: {endpoint_config['region']}")
return endpoint_config
except Exception as e:
logger.error(f"โŒ ์—”๋“œํฌ์ธํŠธ ์ƒ์„ฑ ์‹คํŒจ: {e}")
return None
def create_huggingface_space(self):
"""Hugging Face Space ์ƒ์„ฑ"""
logger.info("๐ŸŒ Hugging Face Space ์ƒ์„ฑ ์ค‘...")
try:
# Space ์„ค์ •
space_config = {
"name": self.space_name,
"type": "gradio",
"sdk": "gradio",
"title": "Lily Math RAG System",
"description": "์ˆ˜ํ•™ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ RAG ์‹œ์Šคํ…œ",
"license": "mit",
"python_version": "3.9"
}
logger.info("โœ… Space ์„ค์ • ์™„๋ฃŒ")
logger.info(f" Space ์ด๋ฆ„: {space_config['name']}")
logger.info(f" ํƒ€์ž…: {space_config['type']}")
return space_config
except Exception as e:
logger.error(f"โŒ Space ์ƒ์„ฑ ์‹คํŒจ: {e}")
return None
def upload_model_to_hub(self):
"""๋ชจ๋ธ์„ Hugging Face Hub์— ์—…๋กœ๋“œ"""
logger.info("๐Ÿ“ค ๋ชจ๋ธ ์—…๋กœ๋“œ ์ค‘...")
try:
# ๋กœ์ปฌ ๋ชจ๋ธ ๊ฒฝ๋กœ
local_model_path = "hearth_llm_model"
if os.path.exists(local_model_path):
logger.info(f"โœ… ๋กœ์ปฌ ๋ชจ๋ธ ๋ฐœ๊ฒฌ: {local_model_path}")
# ๋ชจ๋ธ ์—…๋กœ๋“œ (์‹ค์ œ๋กœ๋Š” Hugging Face CLI ์‚ฌ์šฉ)
logger.info("๐Ÿ’ก ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ๋ชจ๋ธ์„ ์—…๋กœ๋“œํ•˜์„ธ์š”:")
logger.info(f" huggingface-cli upload your-username/lily-math-model {local_model_path}")
return True
else:
logger.warning(f"โš ๏ธ ๋กœ์ปฌ ๋ชจ๋ธ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค: {local_model_path}")
return False
except Exception as e:
logger.error(f"โŒ ๋ชจ๋ธ ์—…๋กœ๋“œ ์‹คํŒจ: {e}")
return False
def test_cloud_inference(self, endpoint_url):
"""ํด๋ผ์šฐ๋“œ ์ถ”๋ก  ํ…Œ์ŠคํŠธ"""
logger.info("๐Ÿงช ํด๋ผ์šฐ๋“œ ์ถ”๋ก  ํ…Œ์ŠคํŠธ")
try:
# ํ…Œ์ŠคํŠธ ์š”์ฒญ
test_data = {
"inputs": "์•ˆ๋…•ํ•˜์„ธ์š”! ์ˆ˜ํ•™ ๋ฌธ์ œ๋ฅผ ๋„์™€์ฃผ์„ธ์š”.",
"parameters": {
"max_length": 100,
"temperature": 0.7
}
}
response = requests.post(
f"{endpoint_url}/predict",
json=test_data,
headers={"Authorization": f"Bearer {os.getenv('HF_TOKEN')}"}
)
if response.status_code == 200:
result = response.json()
logger.info(f"โœ… ์ถ”๋ก  ํ…Œ์ŠคํŠธ ์„ฑ๊ณต: {result}")
return True
else:
logger.error(f"โŒ ์ถ”๋ก  ํ…Œ์ŠคํŠธ ์‹คํŒจ: {response.status_code}")
return False
except Exception as e:
logger.error(f"โŒ ์ถ”๋ก  ํ…Œ์ŠคํŠธ ์‹คํŒจ: {e}")
return False
def main():
"""๋ฉ”์ธ ์„ค์ • ํ•จ์ˆ˜"""
print("๐Ÿš€ Hugging Face ํด๋ผ์šฐ๋“œ GPU ํ™˜๊ฒฝ ์„ค์ •")
print("=" * 50)
# 1. Hugging Face ์„ค์ • ํด๋ž˜์Šค ์ดˆ๊ธฐํ™”
setup = HuggingFaceCloudSetup()
# 2. Hugging Face ๋กœ๊ทธ์ธ
if not setup.setup_huggingface_login():
print("โŒ ๋กœ๊ทธ์ธ ์‹คํŒจ")
return
# 3. ์ถ”๋ก  ์—”๋“œํฌ์ธํŠธ ์ƒ์„ฑ
endpoint_config = setup.create_inference_endpoint()
# 4. Hugging Face Space ์ƒ์„ฑ
space_config = setup.create_huggingface_space()
# 5. ๋ชจ๋ธ ์—…๋กœ๋“œ
setup.upload_model_to_hub()
print("\n๐ŸŽ‰ Hugging Face ํด๋ผ์šฐ๋“œ ์„ค์ • ์™„๋ฃŒ!")
print("โœ… ๋‹ค์Œ ๋‹จ๊ณ„:")
print("1. Hugging Face Inference Endpoints์—์„œ ์—”๋“œํฌ์ธํŠธ ์ƒ์„ฑ")
print("2. ๋ชจ๋ธ์„ Hugging Face Hub์— ์—…๋กœ๋“œ")
print("3. Railway Hearth Chat๊ณผ ์—ฐ๋™ ์„ค์ •")
if __name__ == "__main__":
main()