File size: 1,210 Bytes
e4f4789
6fc05de
e4f4789
 
 
96b3f50
6276f44
96b3f50
e4f4789
 
 
6fc05de
e4f4789
887a4cd
e4f4789
 
 
887a4cd
 
 
 
 
 
 
 
 
 
96b3f50
7d2bda7
e4f4789
 
 
7d2bda7
96b3f50
0ab3859
6fc05de
7d2bda7
96b3f50
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import os
import gradio as gr
from fastapi import FastAPI
from transformers import AutoTokenizer, pipeline
import threading

MODEL = os.environ.get("MODEL_NAME", "google/gemma-4-E2B")

tokenizer = None
generator = None
_model_lock = threading.Lock()

def load_model():
    global tokenizer, generator
    with _model_lock:
        if tokenizer is not None and generator is not None:
            return
        tokenizer = AutoTokenizer.from_pretrained(MODEL, trust_remote_code=True)
        from transformers import AutoModelForCausalLM
        model = AutoModelForCausalLM.from_pretrained(
            MODEL,
            device_map={"": "cpu"},
            torch_dtype="float32",
            low_cpu_mem_usage=True,
            trust_remote_code=True
        )
        generator = pipeline("text-generation", model=model, tokenizer=tokenizer, device=-1)

def generate(prompt):
    if generator is None:
        load_model()
    out = generator(prompt, max_new_tokens=64, do_sample=False)
    return out[0]["generated_text"]

demo = gr.Interface(fn=generate, inputs=gr.Textbox(lines=4, label="Prompt"), outputs="text", title="Gemma-4-E2B (CPU)")

app = FastAPI()
app = gr.mount_gradio_app(app, demo, path="/")