Spaces:
Paused
Paused
| import os | |
| import time | |
| from flask import Flask, request, render_template | |
| from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig | |
| from peft import PeftModel | |
| import torch | |
| app = Flask(__name__) | |
| BASE_MODEL = "EleutherAI/gpt-neox-20b" | |
| LORA_ADAPTER = "./model" | |
| device = "cuda" if torch.cuda.is_available() else "cpu" | |
| print(f"Using device: {device}") | |
| # 4-bit quantization config | |
| bnb_config = BitsAndBytesConfig( | |
| load_in_4bit=True, | |
| bnb_4bit_compute_dtype=torch.float16, | |
| bnb_4bit_use_double_quant=True, | |
| bnb_4bit_quant_type="nf4" | |
| ) | |
| print("Loading tokenizer...") | |
| tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL) | |
| print("Loading 4-bit base model...") | |
| base_model = AutoModelForCausalLM.from_pretrained( | |
| BASE_MODEL, | |
| quantization_config=bnb_config, | |
| device_map="auto" | |
| ) | |
| print("Loading LoRA adapter...") | |
| model = PeftModel.from_pretrained( | |
| base_model, | |
| LORA_ADAPTER, | |
| device_map="auto" | |
| ) | |
| model.eval() | |
| print("Model loaded successfully in 4-bit!") | |
| # ----------------------------- | |
| # Flask Routes | |
| # ----------------------------- | |
| def index(): | |
| output_text = "" | |
| if request.method == "POST": | |
| user_input = request.form.get("user_input") | |
| if user_input: | |
| inputs = tokenizer(user_input, return_tensors="pt").to(device) | |
| with torch.no_grad(): | |
| generated_ids = model.generate( | |
| **inputs, | |
| max_new_tokens=200, | |
| do_sample=True, | |
| temperature=0.7 | |
| ) | |
| output_text = tokenizer.decode(generated_ids[0], skip_special_tokens=True) | |
| return render_template("index.html", output_text=output_text) | |
| # Give HF time to detect the server | |
| time.sleep(2) | |
| if __name__ == "__main__": | |
| app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 7860))) | |