# 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"] ```