344 lines
10 KiB
Markdown
344 lines
10 KiB
Markdown
# Offline GPT mit einem h2o-Modell
|
|
|
|
Zuerst klonen wir uns das Repository:
|
|
|
|
```shell
|
|
git clone https://github.com/h2oai/h2ogpt.git
|
|
```
|
|
|
|
Nun machen wir ein ```git pull``` im Repository um sicherzugehen das wir auch alles haben.
|
|
|
|
### Abhängigkeiten installieren (mit Anaconda)
|
|
|
|
```shell
|
|
conda create --name h2ogpt python=3.10
|
|
```
|
|
Nun aktivieren die Environment:
|
|
|
|
```shell
|
|
conda activate h2ogpt
|
|
```
|
|
|
|
Abhängigkeiten in der Umgebung installieren.
|
|
Dazu mit der ```Anaconda Prompt``` im Repository Order sein.
|
|
|
|
```shell
|
|
pip install -r requirements.txt
|
|
```
|
|
Wir brauchen auch noch ein Base-Modell, welches wir nutzen können.
|
|
|
|
Diese können wir von [huggingface.co](https://huggingface.co/h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3) herunterladen.
|
|
```shell
|
|
git clone https://huggingface.co/h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3
|
|
```
|
|
In Windows gibt es den Bug, das die Dateien, welche größer als 4 GB sind, nicht herunterladbar sind.
|
|
Es können verschiedene Modelle herunterladen werden. :)
|
|
|
|
### Ausführen in der CLI & Debug
|
|
|
|
Nun haben wir einen Ordner wo alle Dateien vorhanden sind. Diesen brauchen wir dann um das Programm zu starten.
|
|
|
|
Dann starten wir das Programm indem wir:
|
|
```shell
|
|
python generate.py --base_model=h2ogpt-gm-oasst1-en-2048-falcon-7b-v3 --score_model=None --prompt_type=human_bot --cli=True
|
|
```
|
|
|
|
Fehler welche hier auftreten können:
|
|
- No GPUs detected
|
|
- ModuleNotFoundError: No module named 'langchain'
|
|
- ...
|
|
|
|
|
|
Zum ersten Fehler: In der Environment dies überprüfen:
|
|
```text
|
|
import torch
|
|
torch.cuda.is_available()
|
|
```
|
|
|
|
False --> Cache leeren und eine andere Version installieren.
|
|
|
|
Zum zweiten Fehler: In der Environment dies überprüfen:
|
|
|
|
```text
|
|
pip install --upgrade langchain
|
|
```
|
|
|
|
Weitere Fehler müssen bei bedarf selber nachgesehen werden.
|
|
|
|
Jedoch könnten wir auch das Problem haben, das unser VRAM zu klein ist.
|
|
Hierzu können wir das Model "effizienter" in die Grafikkarte laden. Aber wir haben einen Qualitätsverlust.
|
|
|
|
Dann starten wir das Programm indem wir:
|
|
```shell
|
|
python generate.py --base_model=h2ogpt-gm-oasst1-en-2048-falcon-7b-v3 --score_model=None --prompt_type=human_bot --cli=True --load_4bit=True
|
|
```
|
|
|
|
### Skript zum Ausführen erstellen
|
|
|
|
Damit man nicht jedes Mal den Command eingeben muss, kann man ein kleines shell skript erstellen
|
|
welches man dann einfach aufrufen kann. [in Linux]
|
|
|
|
model.sh
|
|
```shell
|
|
python generate.py \
|
|
--share=False \
|
|
--gradio_offline_level=1 \
|
|
--base_model=h2ogpt-gm-oasst1-en-2048-falcon-7b-v3 \
|
|
--score_model=None \
|
|
--load_4bit=True \
|
|
--prompt_type=human_bot
|
|
```
|
|
|
|
Ausführen mit ```run model.sh```.
|
|
|
|
|
|
### Ausführen mit einer Weboberfläche
|
|
|
|
Dazu muss man nur die Flag ```--cli=True``` entfernen.
|
|
|
|
### Eigene Daten verwenden
|
|
|
|
Füge noch die Flag ```--langchain_mode=MyData``` mit ein.
|
|
|
|
Jedoch musste ich noch in der Umgebung mehrere Pakete installieren damit ich diese Funktion auch nutzen konnte.
|
|
|
|
```text
|
|
pip install sentence_transformers
|
|
pip install unstructured
|
|
pip install unstructured[pdf]
|
|
pip install chromadb <-- Hier ist Microsoft C++ notwendig
|
|
pip install xformers
|
|
```
|
|
|
|
Bei fehlern mit ```chromadb``` nutze ```pip install --upgrade chromadb==0.3.29```.
|
|
|
|
Nun kann man an der linken seite seine Dokumente hochladen und man kann dazu Fragen stellen.
|
|
|
|
|
|
### Als Dockerfile
|
|
|
|
Das ist die Dockerfile für einen __rohen__ Chatbot.
|
|
(Ohne Dokumentenverarbeitung und ohne GPU!)
|
|
```dockerfile
|
|
# Use Ubuntu as the base image
|
|
FROM ubuntu:latest
|
|
|
|
# Set environment variables to avoid interactive prompts during Anaconda installation
|
|
ENV PATH="/root/anaconda3/bin:${PATH}"
|
|
ARG PATH="/root/anaconda3/bin:${PATH}"
|
|
|
|
# Set the working directory to /app
|
|
WORKDIR /app
|
|
|
|
# Update and upgrade Ubuntu packages
|
|
RUN apt-get update && apt-get upgrade -y
|
|
|
|
# Install necessary packages for Anaconda
|
|
RUN apt-get install -y wget bzip2 ca-certificates libglib2.0-0 libxext6 libsm6 libxrender1 git curl git-lfs
|
|
|
|
# Download Anaconda installer for Linux
|
|
RUN curl -o ~/anaconda.sh -O https://repo.anaconda.com/archive/Anaconda3-2023.07-2-Linux-x86_64.sh
|
|
|
|
# Install Anaconda
|
|
RUN /bin/bash ~/anaconda.sh -b -p /root/anaconda3 && \
|
|
rm ~/anaconda.sh && \
|
|
echo "export PATH=/root/anaconda3/bin:$PATH" >> /root/.bashrc
|
|
|
|
# Clone the h2ogpt repository
|
|
RUN git clone https://github.com/h2oai/h2ogpt.git
|
|
|
|
# Pull the latest changes from the repository
|
|
RUN cd h2ogpt && git pull
|
|
|
|
# Create a conda environment named "h2ogpt" with Python 3.10
|
|
RUN /root/anaconda3/bin/conda create --name h2ogpt python=3.10 -y
|
|
|
|
# Activate the "h2ogpt" environment and install dependencies from requirements.txt
|
|
RUN /bin/bash -c "source activate h2ogpt && pip install -r /app/h2ogpt/requirements.txt"
|
|
|
|
# Installiere weitere abhängigkeiten
|
|
RUN pip install fire
|
|
|
|
# Clone the h2ogpt model
|
|
RUN git clone https://huggingface.co/h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3
|
|
|
|
# Activate the "h2ogpt" Conda environment
|
|
SHELL ["/bin/bash", "-c"]
|
|
RUN source activate h2ogpt && \
|
|
pip install langchain && \
|
|
pip install posthog
|
|
|
|
|
|
# Set the default command to run the program
|
|
CMD ["/bin/bash", "-c", "source activate h2ogpt && python /app/h2ogpt/generate.py --share=False --gradio_offline_level=1 --base_model=h2ogpt-gm-oasst1-en-2048-falcon-7b-v3 --score_model=None --load_4bit=True --prompt_type=human_bot --langchain_mode=MyData"]
|
|
```
|
|
Hier mit den Paketen für die Dokumentverarbeitung: (unvollständig)
|
|
|
|
```dockerfile
|
|
# Use Ubuntu as the base image
|
|
FROM ubuntu:latest
|
|
|
|
# Set environment variables to avoid interactive prompts during Anaconda installation
|
|
ENV PATH="/root/anaconda3/bin:${PATH}"
|
|
ARG PATH="/root/anaconda3/bin:${PATH}"
|
|
|
|
# Alle Dateien werden in "/app" reinkopiert/geladen
|
|
WORKDIR /app
|
|
|
|
# OS aktuell halten
|
|
RUN apt-get update && apt-get upgrade -y
|
|
|
|
# Abhängigkeiten für Anaconda
|
|
RUN apt-get install -y wget bzip2 ca-certificates libglib2.0-0 libxext6 libsm6 libxrender1 git curl git-lfs
|
|
|
|
# Anaconda installer für Linux
|
|
RUN curl -o ~/anaconda.sh -O https://repo.anaconda.com/archive/Anaconda3-2023.07-2-Linux-x86_64.sh
|
|
|
|
# Install Anaconda
|
|
RUN /bin/bash ~/anaconda.sh -b -p /root/anaconda3 && \
|
|
rm ~/anaconda.sh && \
|
|
echo "export PATH=/root/anaconda3/bin:$PATH" >> /root/.bashrc
|
|
|
|
# Klone das h2ogpt repository
|
|
RUN git clone https://github.com/h2oai/h2ogpt.git
|
|
|
|
# Aktuell halten!
|
|
RUN cd h2ogpt && git pull
|
|
|
|
# Conda Environment erstellen
|
|
RUN /root/anaconda3/bin/conda create --name h2ogpt python=3.10 -y
|
|
|
|
# Aktiviere die Env und installiere die Abhängigkeiten hinein
|
|
RUN /bin/bash -c "source activate h2ogpt && pip install -r /app/h2ogpt/requirements.txt"
|
|
|
|
# Clone the h2ogpt model
|
|
# RUN git clone https://huggingface.co/h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3
|
|
|
|
# Für "chromadb" brauchen wir einen c++ Compiler
|
|
RUN apt-get update && apt-get install -y g++
|
|
|
|
# Activiere die "h2ogpt" Conda Env und installiere noch weitere Pakete
|
|
SHELL ["/bin/bash", "-c"]
|
|
RUN source activate h2ogpt && \
|
|
pip install langchain && \
|
|
pip install posthog && \
|
|
pip install unstructured && \
|
|
pip install unstructured[pdf] && \
|
|
pip install sentence_transformers && \
|
|
pip install xformers && \
|
|
pip install --upgrade chromadb==0.3.29 && \
|
|
pip install fire
|
|
|
|
# Ordner für das Modell erstellen
|
|
RUN mkdir /app/usedModel
|
|
|
|
# generate.py ausführen
|
|
CMD ["/bin/bash", "-c", "source activate h2ogpt && python /app/h2ogpt/generate.py --share=False --gradio_offline_level=1 --base_model=/app/usedModel --score_model=None --load_4bit=True --prompt_type=human_bot --langchain_mode=MyData"]
|
|
|
|
# Ausführen des Containers mit:
|
|
# docker run --gpus all -p 7860:7860 -v C:\Users\User\Desktop\temp2\model:/app/usedModel h2otest
|
|
```
|
|
|
|
|
|
Aktuelles noch bekanntes Problem: GPU support __NICHT__ verfügbar!
|
|
|
|
Hier die aktuellste Variante mit GPU support:
|
|
|
|
```dockerfile
|
|
# Wir nutzen ein Image von NVIDIA
|
|
FROM nvidia/cuda:12.2.0-runtime-ubuntu20.04
|
|
|
|
# Lege für später Variablen für einen non-root User fest (mit fester UID zur besseren Zuweisung)
|
|
ENV NB_USER="gpuuser"
|
|
ENV UID=999
|
|
|
|
# Install essential packages
|
|
RUN apt-get update && apt-get install -y \
|
|
python3.8 \
|
|
python3-pip \
|
|
python3.8-dev \
|
|
python3.8-distutils \
|
|
gcc \
|
|
g++ \
|
|
curl \
|
|
wget \
|
|
sudo \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Installiere hier PyTorch mit GPU support (Versionen können angepasst werden)
|
|
RUN python3.8 -m pip install --upgrade pip \
|
|
torch==2.0.1\
|
|
torchvision==0.15.2
|
|
|
|
# Erstellen eines non-root Users
|
|
RUN useradd -l -m -s /bin/bash -u $UID $NB_USER
|
|
|
|
# Set environment variables to avoid interactive prompts during Anaconda installation
|
|
ENV PATH="/root/anaconda3/bin:${PATH}"
|
|
ARG PATH="/root/anaconda3/bin:${PATH}"
|
|
|
|
# Alle Dateien werden in "/app" reinkopiert/geladen
|
|
WORKDIR /app
|
|
|
|
# OS aktuell halten
|
|
RUN apt-get update && apt-get upgrade -y
|
|
|
|
# Abhängigkeiten für Anaconda
|
|
RUN apt-get install -y wget
|
|
RUN apt-get install -y bzip2
|
|
RUN apt-get install -y ca-certificates
|
|
# RUN apt-get install -y libglib2.0-0
|
|
RUN apt-get install -y libxext6
|
|
RUN apt-get install -y libsm6
|
|
RUN apt-get install -y libxrender1
|
|
RUN apt-get install -y git
|
|
RUN apt-get install -y curl
|
|
RUN apt-get install -y git-lfs
|
|
|
|
# Anaconda installer für Linux
|
|
RUN curl -o ~/anaconda.sh -O https://repo.anaconda.com/archive/Anaconda3-2023.07-2-Linux-x86_64.sh
|
|
|
|
# Install Anaconda
|
|
RUN /bin/bash ~/anaconda.sh -b -p /root/anaconda3 && \
|
|
rm ~/anaconda.sh && \
|
|
echo "export PATH=/root/anaconda3/bin:$PATH" >> /root/.bashrc
|
|
|
|
# Klone das h2ogpt repository
|
|
RUN git clone https://github.com/h2oai/h2ogpt.git
|
|
|
|
# Aktuell halten!
|
|
RUN cd h2ogpt && git pull
|
|
|
|
# Conda Environment erstellen
|
|
RUN /root/anaconda3/bin/conda create --name h2ogpt python=3.10 -y
|
|
|
|
# Aktiviere die Env und installiere die Abhängigkeiten hinein
|
|
RUN /bin/bash -c "source activate h2ogpt && pip install -r /app/h2ogpt/requirements.txt"
|
|
|
|
# Clone the h2ogpt model
|
|
# RUN git clone https://huggingface.co/h2oai/h2ogpt-gm-oasst1-en-2048-falcon-7b-v3
|
|
|
|
# Für "chromadb" brauchen wir einen c++ Compiler
|
|
RUN apt-get update && apt-get install -y g++
|
|
|
|
# Activiere die "h2ogpt" Conda Env und installiere noch weitere Pakete
|
|
SHELL ["/bin/bash", "-c"]
|
|
RUN source activate h2ogpt && \
|
|
pip install langchain && \
|
|
pip install posthog && \
|
|
pip install unstructured && \
|
|
pip install unstructured[pdf] && \
|
|
pip install sentence_transformers && \
|
|
pip install xformers && \
|
|
pip install --upgrade chromadb==0.3.29 && \
|
|
pip install fire
|
|
|
|
# Ordner für das Modell erstellen
|
|
RUN mkdir /app/usedModel
|
|
|
|
# generate.py ausführen
|
|
CMD ["/bin/bash", "-c", "source activate h2ogpt && python /app/h2ogpt/generate.py --share=False --gradio_offline_level=1 --base_model=/app/usedModel --score_model=None --load_4bit=True --prompt_type=human_bot --langchain_mode=MyData"]
|
|
```
|
|
|
|
|