HelperSheets/docker/OfflineGPT.md

344 lines
10 KiB
Markdown
Raw Normal View History

2024-08-26 18:09:02 +02:00
# 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"]
```