358 lines
12 KiB
Bash
358 lines
12 KiB
Bash
sudo systemctl stop cloud-init
|
||
sudo systemctl disable cloud-init
|
||
sudo systemctl mask cloud-init
|
||
sudo touch /etc/cloud/cloud-init.disabled
|
||
sudo reboot
|
||
hostnamectl
|
||
sudo hostnamectl set-hostname llm-node
|
||
timedatectl list-timezones | grep Berlin
|
||
sudo timedatectl set-timezone Europe/Berlin
|
||
sudo update-locale LANG=de_DE.UTF-8
|
||
PermitRootLogin no
|
||
PasswordAuthentication yes
|
||
sudo nano /etc/ssh/sshd_config
|
||
sudo systemctl reload ssh
|
||
sudo apt install ufw -y
|
||
sudo ufw default deny incoming
|
||
sudo ufw default allow outgoing
|
||
sudo ufw allow OpenSSH
|
||
sudo ufw enable
|
||
sudo ufw status verbose
|
||
sudo apt update
|
||
sudo apt install -y ca-certificates curl gnupg lsb-release
|
||
sudo install -m 0755 -d /etc/apt/keyrings
|
||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||
sudo chmod a+r /etc/apt/keyrings/docker.gpg
|
||
echo "deb [arch=$(dpkg --print-architecture) \
|
||
signed-by=/etc/apt/keyrings/docker.gpg] \
|
||
https://download.docker.com/linux/ubuntu \
|
||
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||
sudo apt update
|
||
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||
docker --version
|
||
docker compose version
|
||
docker run hello-world
|
||
newgrp docker
|
||
docker run hello-world
|
||
curl "http://localhost:8000/search?query=Mae-geri"
|
||
source /home/llmadmin/venvs/embedding/bin/activate
|
||
exit
|
||
echo 'source ~/venvs/embedding/bin/activate' >> ~/.bash_aliases
|
||
source ~/.bash_aliases
|
||
embedding
|
||
sudo nano /home/llmadmin/llm-api/app.py
|
||
ls
|
||
cd venvs
|
||
ls
|
||
cd embedding/
|
||
ls
|
||
cd /
|
||
ls
|
||
cd home
|
||
ls
|
||
cd llmadmin/
|
||
ls
|
||
mkdir -p ~/llm-api
|
||
ls
|
||
cd llm-api/
|
||
nano app.py
|
||
mkdir logs
|
||
ls
|
||
uvicorn app:app --host 0.0.0.0 --port 8000
|
||
groups
|
||
sudo usermod -aG docker $USER
|
||
newgrp docker
|
||
curl -fsSL https://ollama.com/install.sh | sh
|
||
ollama --version
|
||
ollama version is 0.10.1
|
||
ollama run mistral
|
||
curl http://localhost:11434/api/tags
|
||
mkdir -p ~/docker/qdrant
|
||
cd ~/docker/qdrant
|
||
nano docker-compose.yml
|
||
docker compose up -d
|
||
docker ps
|
||
curl http://localhost:6333/collections
|
||
sudo systemctl enable ollama
|
||
sudo systemctl start ollama
|
||
ollama run mistral --keep-alive
|
||
sudo apt install python3 python3-pip -y
|
||
pip3 install --upgrade pip
|
||
# 1. Installiere venv (falls noch nicht da)
|
||
sudo apt install python3-venv -y
|
||
# 2. Erstelle eine neue virtuelle Umgebung z. B. im Projektverzeichnis
|
||
python3 -m venv ~/venvs/embedding
|
||
# 3. Aktiviere die virtuelle Umgebung
|
||
source ~/venvs/embedding/bin/activate
|
||
# 4. Upgrade pip (jetzt erlaubt!)
|
||
pip install --upgrade pip
|
||
# 5. Installiere deine Embedding-Tools, z. B.
|
||
pip install sentence-transformers qdrant-client
|
||
sudo nano embed_to_qdrant.py
|
||
python embed_to_qdrant.py
|
||
sudo nano search_qdrant.py
|
||
python search_qdrant.py
|
||
sudo nano search_qdrant.py
|
||
python search_qdrant.py
|
||
sudo nano search_qdrant.py
|
||
python search_qdrant.py
|
||
pip install fastapi uvicorn
|
||
pip install requests
|
||
sudo nano app.py
|
||
uvicorn app:app --host 0.0.0.0 --port 8000
|
||
ls
|
||
rm app.py
|
||
ls
|
||
curl -X POST http://localhost:8000/embed -H "Content-Type: application/json" -d '{"texts": ["Mae-geri ist ein gerader Tritt.", "Hikite stabilisiert die Technik."]}'
|
||
curl "http://localhost:8000/search?query=Wie tritt man Mae-geri?"
|
||
curl -X POST http://localhost:8000/prompt -H "Content-Type: application/json" -d '{"query": "Wie wird Mae-geri ausgeführt?"}'
|
||
curl "http://localhost:8000/search?query=Wie tritt man Mae-geri?"
|
||
curl "http://localhost:8000/search?query=Wie%20tritt%20man%20Mae-geri?"
|
||
curl --get http://localhost:8000/search --data-urlencode "query=Wie tritt man Mae-geri?"
|
||
/home/llmadmin/llm-api/app.py
|
||
/home/llmadmin/venvs/embedding/
|
||
/home/llmadmin/venvs/embedding/bin/python --version
|
||
cd /
|
||
cd ~/llm-api
|
||
uvicorn app:app --host 0.0.0.0 --port 8000
|
||
sudo nano /etc/systemd/system/llm-api.service
|
||
sudo systemctl daemon-reexec
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl enable llm-api
|
||
sudo systemctl start llm-api
|
||
sudo systemctl status llm-api
|
||
deactivate
|
||
ls
|
||
cd /
|
||
ls
|
||
cd home
|
||
ls
|
||
cd llmadmin/
|
||
ls
|
||
cd docker/
|
||
ls
|
||
cd q
|
||
cd qdrant/
|
||
ls
|
||
nano docker-compose.yml
|
||
sudo restart
|
||
sudo systemctl status llm-api
|
||
docker ps
|
||
curl http://localhost:8000/search?query=test
|
||
cd /
|
||
curl http://localhost:8000/search?query=test
|
||
sudo reboot
|
||
sudo systemctl status llm-api
|
||
docker ps
|
||
curl http://localhost:8000/search?query=test
|
||
sudo systemctl status llm-api
|
||
docker ps
|
||
curl http://localhost:8000/search?query=test
|
||
docker ps
|
||
curl http://localhost:8000/search?query=test
|
||
● llm-api.service - FastAPI Embedding API (LLM)
|
||
Aug 04 13:41:14 llm-node systemd[1]: Started llm-api.service - FastAPI Embeddin>
|
||
Aug 04 13:41:23 llm-node uvicorn[1312]: INFO: Started server process [1312]
|
||
Aug 04 13:41:23 llm-node uvicorn[1312]: INFO: Waiting for application start>
|
||
Aug 04 13:41:23 llm-node uvicorn[1312]: INFO: Application startup complete.
|
||
Aug 04 13:41:23 llm-node uvicorn[1312]: INFO: Uvicorn running on http://0.0>
|
||
Aug 04 13:42:05 llm-node uvicorn[1312]: /home/llmadmin/venvs/embedding/lib/pyth>
|
||
Aug 04 13:42:05 llm-node uvicorn[1312]: return forward_call(*args, **kwargs)
|
||
Aug 04 13:42:05 llm-node uvicorn[1312]: INFO: 127.0.0.1:58988 - "GET /searc>
|
||
|
||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||
30dfd2e38f0b qdrant/qdrant "./entrypoint.sh" 2 hours ago Up About a minute 0.0.0.0:6333->6333/tcp, [::]:6333->6333/tcp, 6334/tcp qdrant
|
||
[{"score":0.105378054,"text":"Hikite stabilisiert die Technik."},{"score":0.067576095,"text":"Ein Kumite-Drill verbessert die Reaktionsgeschwindigkeit."},{"score":0.042029735,"text":"Mae-geri ist ein gerader Tritt."}](embedding) llmadmin@llm-node:~$
|
||
|
||
|
||
|
||
|
||
deaktivate
|
||
Aug 04 13:41:23 llm-node uvicorn[1312]: INFO: Uvicorn running on http://0.0>deactivate
|
||
deaktivate
|
||
deactivate
|
||
sudo systemctl status llm-api
|
||
docker ps
|
||
curl http://localhost:8000/search?query=test
|
||
sudo systemctl status llm-api
|
||
sudo ss -tuln | grep 8000
|
||
sudo journalctl -fu llm-api
|
||
sudo ufw status verbose
|
||
sudo ufw allow 8000/tcp
|
||
sudo ufw reload
|
||
sudo ufw status verbose
|
||
cd home
|
||
ls
|
||
cd llm-api
|
||
nano app.py
|
||
cd ~/llm-api
|
||
uvicorn app:app --host 0.0.0.0 --port 8000
|
||
source ~/venvs/embedding/bin/activate
|
||
cd ~/llm-api
|
||
uvicorn app:app --host 0.0.0.0 --port 8000
|
||
sudo reboot
|
||
uvicorn app:app --host 0.0.0.0 --port 8000
|
||
cd llm-api/
|
||
uvicorn app:app --host 0.0.0.0 --port 8000
|
||
uvicorn llm-api:app --host 0.0.0.0 --port 8000
|
||
ls
|
||
./test_llm_api.sh
|
||
pkill -f "uvicorn llm_api:app"
|
||
uvicorn llm-api:app --host 0.0.0.0 --port 8000
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000 --log-level debug
|
||
uvicorn app:app --host 0.0.0.0 --port 8000
|
||
pkill -f "uvicorn llm_api:app"
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
kill 52619
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000 --log-level debug
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
./test_llm_api.sh
|
||
pkill -f "uvicorn llm_api:app"
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000
|
||
./test_llm_api.sh
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000
|
||
./test_llm_api.sh
|
||
pkill -f "uvicorn llm_api:app"
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
kill 54019
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000
|
||
pkill -f "uvicorn llm_api:app"
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000
|
||
# Tötet alle Prozesse, die auf Port 8000 lauschen
|
||
lsof -ti TCP:8000 | xargs -r kill -9
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
# im llm-api-Verzeichnis und aktiviertem venv
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000 &
|
||
SERVER_PID=$!
|
||
echo "Uvicorn läuft als PID $SERVER_PID"
|
||
lsof -ti TCP:8000 | xargs -r kill -9
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000 &
|
||
pip install nltk
|
||
python - <<EOF
|
||
import nltk
|
||
nltk.download('punkt')
|
||
EOF
|
||
|
||
pip install pdfplumber
|
||
pip install pillow
|
||
# im virtuellen Environment
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000
|
||
(embedding) llmadmin@llm-node:~$ # im virtuellen Environment
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000
|
||
INFO: Will watch for changes in these directories: ['/home/llmadmin']
|
||
ERROR: [Errno 98] Address already in use
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
kill 27023
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
cd llm-api/
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
kill 48457
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
sudo ufw allow 8000/tcp
|
||
sudo ufw status
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
kill 48507
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000
|
||
curl -i http://127.0.0.1:8000/openapi.json
|
||
curl -X POST http://127.0.0.1:8000/embed -H "Content-Type: application/json" -d '{"text": "Test"}'
|
||
curl -i -X POST http://127.0.0.1:8000/embed -H "Content-Type: application/json" -d '{
|
||
"collection": "test",
|
||
"chunks": [
|
||
{
|
||
"text": "Das ist ein Testtext.",
|
||
"source": "unit-test"
|
||
}
|
||
]
|
||
}'
|
||
curl -G http://127.0.0.1:8000/search --data-urlencode "query=Test"
|
||
curl -i -G http://127.0.0.1:8000/search --data-urlencode "query=Test" -H "Accept: application/json"
|
||
curl -i -G http://127.0.0.1:8000/search --data-urlencode "query=Test" --data-urlencode "collection=test" -H "Accept: application/json"
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
kill 48633
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
kill 49437
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
cd ~/llm-api
|
||
chmod +x test_llm_api.sh
|
||
./test_llm_api.sh
|
||
chmod +x ~/llm-api/test_llm_api.sh
|
||
cd ~/llm-api
|
||
./test_llm_api.sh
|
||
nano test_llm_api.sh
|
||
./test_llm_api.sh
|
||
# Achte darauf, dass im aktuellen Shell-Environment OLLAMA_URL stimmt (Default ist bereits /api/generate).
|
||
pkill -f "uvicorn llm_api:app" # alten Prozess beenden
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000
|
||
cd ~/llm-api
|
||
./test_llm_api.sh
|
||
pkill -f "uvicorn llm_api:app"
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000
|
||
pkill -f "uvicorn llm_api:app" # alten Prozess beenden
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000
|
||
pkill -f "uvicorn llm_api:app"
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000 --log-level debug
|
||
pkill -f "uvicorn llm_api:app"
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000 --log-level debug
|
||
./test_llm_api.sh
|
||
pkill -f "uvicorn llm_api:app"
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000 --log-level debug
|
||
./test_llm_api.sh
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000 --log-level debug
|
||
./test_llm_api.sh
|
||
pkill -f "uvicorn llm_api:app"
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000 --log-level debug
|
||
./test_llm_api.sh
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000 --log-level debug
|
||
./test_llm_api.sh
|
||
pkill -f "uvicorn llm_api:app"
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000 --log-level debug
|
||
./test_llm_api.sh
|
||
pkill -f "uvicorn llm_api:app" # alten Prozess beenden
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --p ort 8000
|
||
deactivate
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --p ort 8000
|
||
./test_llm_api.sh
|
||
# Server beenden, falls noch laufend
|
||
lsof -ti TCP:8000 | xargs -r kill -9
|
||
# Server neu starten
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000 &
|
||
# Kurz warten
|
||
sleep 2
|
||
# Tests
|
||
./test_llm_api.sh
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
lsof -ti TCP:8000 | xargs -r kill -9
|
||
lsof -i TCP:8000 -sTCP:LISTEN
|
||
uvicorn llm_api:app --reload --host 0.0.0.0 --port 8000 &
|
||
deactivate
|
||
curl -i -X POST http://127.0.0.1:11434/api/generate -H "Content-Type: application/json" -d '{
|
||
"model": "mistral:latest",
|
||
"prompt": "Hallo",
|
||
"stream": false
|
||
}'
|
||
cd knowledge/
|
||
cd karatetrainer/
|
||
nano Lateral.txt
|
||
ls
|
||
cd _imported/
|
||
ls
|
||
cd ..
|
||
ls
|
||
nano Literal.txt
|
||
nano Lateral.txt
|
||
cd llm-api/
|
||
sudo systemctl restart llm-api
|
||
sudo journalctl -fu llm-api
|
||
sudo systemctl status llm-api
|