Jan Kirenz
commited on
Commit
·
b0ce7e8
1
Parent(s):
bd85648
added cpu
Browse files- app.py +27 -31
- requirements.txt +1 -3
app.py
CHANGED
@@ -2,31 +2,28 @@ import streamlit as st
|
|
2 |
from transformers import AutoModelForCausalLM, AutoTokenizer
|
3 |
import torch
|
4 |
|
5 |
-
# Titel der Anwendung
|
6 |
st.title("🚀 Marketing Text Generator mit Falcon")
|
7 |
st.markdown("*Generiere kreative Marketing-Texte mit dem Falcon-7B Modell*")
|
8 |
|
9 |
-
# Modell und Tokenizer laden
|
10 |
-
# Wir nutzen @st.cache_resource, um zu vermeiden, dass das Modell bei jeder Interaktion neu geladen wird
|
11 |
@st.cache_resource
|
12 |
def load_falcon_model():
|
13 |
"""
|
14 |
-
Lädt das Falcon Modell
|
15 |
-
|
16 |
"""
|
17 |
try:
|
18 |
-
# Modellname für Falcon
|
19 |
model_name = "tiiuae/falcon-7b"
|
20 |
|
21 |
-
# Tokenizer
|
22 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
23 |
|
24 |
-
#
|
25 |
model = AutoModelForCausalLM.from_pretrained(
|
26 |
model_name,
|
27 |
trust_remote_code=True,
|
28 |
-
device_map="auto",
|
29 |
-
|
|
|
30 |
)
|
31 |
|
32 |
return model, tokenizer
|
@@ -37,7 +34,6 @@ def load_falcon_model():
|
|
37 |
|
38 |
# Hauptbereich für die Eingabe
|
39 |
with st.form("marketing_form"):
|
40 |
-
# Eingabefelder für die Produktinformationen
|
41 |
product_name = st.text_input(
|
42 |
"Produktname",
|
43 |
help="Geben Sie den Namen Ihres Produkts ein"
|
@@ -48,17 +44,22 @@ with st.form("marketing_form"):
|
|
48 |
help="Beschreiben Sie die wichtigsten Eigenschaften (durch Kommas getrennt)"
|
49 |
)
|
50 |
|
51 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
submit = st.form_submit_button("Marketing-Text generieren")
|
53 |
|
54 |
-
# Text generieren, wenn der Button geklickt wurde
|
55 |
if submit and product_name and key_features:
|
56 |
-
|
57 |
-
with st.spinner("Lade Falcon Modell..."):
|
58 |
model, tokenizer = load_falcon_model()
|
59 |
|
60 |
if model and tokenizer:
|
61 |
-
# Marketing-spezifischer Prompt erstellen
|
62 |
prompt = f"""
|
63 |
Erstelle einen kurzen, überzeugenden Marketing-Text für folgendes Produkt:
|
64 |
Produkt: {product_name}
|
@@ -67,30 +68,25 @@ if submit and product_name and key_features:
|
|
67 |
Der Text sollte professionell und ansprechend sein.
|
68 |
"""
|
69 |
|
70 |
-
# Text generieren
|
71 |
with st.spinner("Generiere Marketing-Text..."):
|
72 |
-
# Text in Token umwandeln
|
73 |
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
|
74 |
|
75 |
-
|
76 |
-
with torch.no_grad(): # Deaktiviert Gradient-Berechnung für Speichereffizienz
|
77 |
outputs = model.generate(
|
78 |
**inputs,
|
79 |
-
max_length=
|
80 |
-
temperature=0.7,
|
81 |
-
top_p=0.9,
|
82 |
-
num_return_sequences=1
|
|
|
83 |
)
|
84 |
|
85 |
-
# Generierten Text dekodieren und anzeigen
|
86 |
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
87 |
|
88 |
-
# Ergebnis anzeigen
|
89 |
st.success("Text wurde erfolgreich generiert!")
|
90 |
st.markdown("### Ihr Marketing-Text:")
|
91 |
st.markdown(generated_text)
|
92 |
|
93 |
-
# Download-Option anbieten
|
94 |
st.download_button(
|
95 |
"Text als Datei speichern",
|
96 |
generated_text,
|
@@ -99,10 +95,10 @@ if submit and product_name and key_features:
|
|
99 |
elif submit:
|
100 |
st.warning("Bitte füllen Sie alle Felder aus.")
|
101 |
|
102 |
-
# Hilfreiche Informationen am Ende
|
103 |
st.markdown("---")
|
104 |
st.markdown("""
|
105 |
-
**Hinweise
|
106 |
-
- Die erste Generierung
|
107 |
-
-
|
|
|
108 |
""")
|
|
|
2 |
from transformers import AutoModelForCausalLM, AutoTokenizer
|
3 |
import torch
|
4 |
|
|
|
5 |
st.title("🚀 Marketing Text Generator mit Falcon")
|
6 |
st.markdown("*Generiere kreative Marketing-Texte mit dem Falcon-7B Modell*")
|
7 |
|
|
|
|
|
8 |
@st.cache_resource
|
9 |
def load_falcon_model():
|
10 |
"""
|
11 |
+
Lädt das Falcon Modell in einer CPU-freundlichen Konfiguration.
|
12 |
+
Diese Version verwendet weniger Speicher und läuft auf allen Systemen.
|
13 |
"""
|
14 |
try:
|
|
|
15 |
model_name = "tiiuae/falcon-7b"
|
16 |
|
17 |
+
# Tokenizer bleibt unverändert
|
18 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
19 |
|
20 |
+
# Angepasste Modellkonfiguration für CPU-Systeme
|
21 |
model = AutoModelForCausalLM.from_pretrained(
|
22 |
model_name,
|
23 |
trust_remote_code=True,
|
24 |
+
device_map="auto",
|
25 |
+
torch_dtype=torch.float32, # Standard-Datentyp statt 8-bit
|
26 |
+
low_cpu_mem_usage=True # Speicheroptimierung für CPU
|
27 |
)
|
28 |
|
29 |
return model, tokenizer
|
|
|
34 |
|
35 |
# Hauptbereich für die Eingabe
|
36 |
with st.form("marketing_form"):
|
|
|
37 |
product_name = st.text_input(
|
38 |
"Produktname",
|
39 |
help="Geben Sie den Namen Ihres Produkts ein"
|
|
|
44 |
help="Beschreiben Sie die wichtigsten Eigenschaften (durch Kommas getrennt)"
|
45 |
)
|
46 |
|
47 |
+
# Zusätzliche Kontrolle über die Textlänge
|
48 |
+
max_length = st.slider(
|
49 |
+
"Maximale Textlänge",
|
50 |
+
min_value=50,
|
51 |
+
max_value=200,
|
52 |
+
value=100,
|
53 |
+
help="Längere Texte benötigen mehr Verarbeitungszeit"
|
54 |
+
)
|
55 |
+
|
56 |
submit = st.form_submit_button("Marketing-Text generieren")
|
57 |
|
|
|
58 |
if submit and product_name and key_features:
|
59 |
+
with st.spinner("Lade Falcon Modell... (Dies kann einige Minuten dauern)"):
|
|
|
60 |
model, tokenizer = load_falcon_model()
|
61 |
|
62 |
if model and tokenizer:
|
|
|
63 |
prompt = f"""
|
64 |
Erstelle einen kurzen, überzeugenden Marketing-Text für folgendes Produkt:
|
65 |
Produkt: {product_name}
|
|
|
68 |
Der Text sollte professionell und ansprechend sein.
|
69 |
"""
|
70 |
|
|
|
71 |
with st.spinner("Generiere Marketing-Text..."):
|
|
|
72 |
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
|
73 |
|
74 |
+
with torch.no_grad():
|
|
|
75 |
outputs = model.generate(
|
76 |
**inputs,
|
77 |
+
max_length=max_length,
|
78 |
+
temperature=0.7,
|
79 |
+
top_p=0.9,
|
80 |
+
num_return_sequences=1,
|
81 |
+
pad_token_id=tokenizer.eos_token_id # Verbesserte Token-Handhabung
|
82 |
)
|
83 |
|
|
|
84 |
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
85 |
|
|
|
86 |
st.success("Text wurde erfolgreich generiert!")
|
87 |
st.markdown("### Ihr Marketing-Text:")
|
88 |
st.markdown(generated_text)
|
89 |
|
|
|
90 |
st.download_button(
|
91 |
"Text als Datei speichern",
|
92 |
generated_text,
|
|
|
95 |
elif submit:
|
96 |
st.warning("Bitte füllen Sie alle Felder aus.")
|
97 |
|
|
|
98 |
st.markdown("---")
|
99 |
st.markdown("""
|
100 |
+
**Wichtige Hinweise:**
|
101 |
+
- Die erste Generierung dauert länger, da das Modell geladen werden muss
|
102 |
+
- Auf Systemen ohne GPU kann die Verarbeitung mehrere Minuten in Anspruch nehmen
|
103 |
+
- Kürzere Texte werden schneller generiert
|
104 |
""")
|
requirements.txt
CHANGED
@@ -1,6 +1,4 @@
|
|
1 |
streamlit
|
2 |
transformers
|
3 |
torch
|
4 |
-
accelerate
|
5 |
-
bitsandbytes
|
6 |
-
sentencepiece
|
|
|
1 |
streamlit
|
2 |
transformers
|
3 |
torch
|
4 |
+
accelerate
|
|
|
|