mindXtrain / docs /install.md
Gregory-L's picture
Professor Codephreak
bankml 0.3.6 on PR #1: penalties, byte-identical pins, a bankml node's own chat and judge models, and the VPS install guide
437dccc verified
|
Raw History Blame
9.2 kB
# Install on the mindX VPS: bankml 0.3.6 and mindXtrain's bankml lane
This guide upgrades the mindX node (mindx.pythai.net, `168.231.126.58`) in eight steps:
1. bankml 0.3.5 → 0.3.6 (repetition penalties, token-identical to llama-server)
2. gen39 re-layered so it answers in words
3. mindXtrain → the Hub's `main` (the bankml serve target, backend and judges)
4. mindX pointed at bankml for mindXtrain's chat, judges and teacher
Every block is meant to be copied whole and pasted into a root shell on the VPS. Each step ends
with a check; do not go on until it passes. [Roll back](#rollback) undoes any step.
**What you need:** root SSH to the VPS, about 15 minutes, and 1 GB free on `/`. Restarting
`bankml` makes mindX's default model unavailable for a few seconds; restarting `mindx` takes
3–4 minutes before `/health` answers again.
---
## 0. Log in and look before you touch
```bash
ssh root@168.231.126.58
```
```bash
df -h / | tail -1
systemctl is-active bankml mindx
curl -s 127.0.0.1:18093/bankml | head -c 200; echo
/home/mindx/bankml-0.3.5/bankml --version
```
You should see both services `active`, a `"verdict": "play"` from bankml, and `bankml 0.3.5`.
Check that no training run is going (a mindX restart in step 7 would end it):
```bash
pgrep -af 'mindxtrain (train|ascend)' || echo "no training running"
```
## 1. Back up what you will change
```bash
TS=$(date -u +%Y%m%dT%H%M%SZ); mkdir -p /root/deploy_backup_bankml036_$TS
cp /etc/systemd/system/bankml.service /home/mindx/mindX/.env /root/deploy_backup_bankml036_$TS/
echo "/root/deploy_backup_bankml036_$TS" | tee /root/LAST_BANKML036_BACKUP
ls -la /root/deploy_backup_bankml036_$TS
```
## 2. Build bankml 0.3.6
bankml has no dependencies to fetch; it builds with the `mindx` user's cargo in a few minutes on
the VPS's two cores. Build from the `v0.3.6` tag once it is published; until then, from `main`.
```bash
sudo -u mindx bash -lc 'cd /home/mindx && rm -rf bankml-src-0.3.6 && git clone --depth 1 --branch v0.3.6 https://github.com/cryptoAGI/bankml bankml-src-0.3.6 || git clone --depth 1 https://github.com/cryptoAGI/bankml bankml-src-0.3.6'
```
```bash
sudo -u mindx bash -lc 'cd /home/mindx/bankml-src-0.3.6 && nice -n 19 cargo build --release 2>&1 | tail -3'
```
```bash
sudo -u mindx mkdir -p /home/mindx/bankml-0.3.6
sudo -u mindx cp /home/mindx/bankml-src-0.3.6/target/release/bankml /home/mindx/bankml-0.3.6/bankml
/home/mindx/bankml-0.3.6/bankml --version
```
**Check:** it prints `bankml 0.3.6` (or later). If it prints 0.3.5, the tag is not out yet and
`main` has not moved past it either: stop here, nothing has changed on the running node.
## 3. Point the service at 0.3.6 and restart bankml
```bash
sed -i 's#/home/mindx/bankml-0\.3\.5/bankml#/home/mindx/bankml-0.3.6/bankml#' /etc/systemd/system/bankml.service
grep ExecStart /etc/systemd/system/bankml.service
```
```bash
systemctl daemon-reload && systemctl restart bankml && sleep 5 && systemctl is-active bankml
```
```bash
curl -s 127.0.0.1:18093/bankml | grep -o '"bankml": *"[^"]*"'
```
**Check:** `"bankml": "0.3.6"`. Now prove the penalties are honoured (0.3.5 answered HTTP 400 to
this request):
```bash
curl -s -o /dev/null -w '%{http_code}\n' 127.0.0.1:18093/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"mindx-gen39-f16","messages":[{"role":"user","content":"Who are you?"}],"max_tokens":16,"repeat_penalty":1.3}'
```
**Check:** `200`.
## 4. Layer gen39 so it answers in words
A 135M generation on its own repeats itself (`,,,,`). A layer over the pinned GGUF adds its
persona, its stop string and a 1.3 repeat penalty; the weights are not copied.
```bash
cat > /home/mindx/models/Modelfile.mindx-gen39 <<'MF'
FROM mindx-gen39-f16
SYSTEM """You are mindX, generation 39."""
PARAMETER stop "<|im_end|>"
PARAMETER num_ctx 2048
PARAMETER repeat_penalty 1.3
MF
chown mindx:mindx /home/mindx/models/Modelfile.mindx-gen39
```
```bash
sudo -u mindx /home/mindx/bankml-0.3.6/bankml create mindx-gen39 -f /home/mindx/models/Modelfile.mindx-gen39 --registry /home/mindx/models/registry
```
```bash
curl -s 127.0.0.1:18093/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"mindx-gen39","messages":[{"role":"user","content":"Who are you?"}],"max_tokens":48}' | python3 -c 'import json,sys; print(json.load(sys.stdin)["choices"][0]["message"]["content"])'
```
**Check:** an answer in words, not a run of commas. (`mindx-gen39-f16` is still the bare pin;
`mindx-gen39` is now the layer. One thread on the VPS: give it 10–30 seconds.)
## 5. Bring mindXtrain to the Hub's `main`
mindXtrain moved from GitHub (archived) to `huggingface.co/PYTHAI/mindXtrain`. The checkout on
the VPS still tracks GitHub at v1.0.2 and has a local `uv.lock` edit, which is set aside first.
```bash
cd /home/mindx/mindXtrain
sudo -u mindx git stash push -m "pre-bankml uv.lock" -- uv.lock || true
sudo -u mindx git remote add hf https://huggingface.co/PYTHAI/mindXtrain 2>/dev/null || true
sudo -u mindx GIT_LFS_SKIP_SMUDGE=1 git fetch hf main
sudo -u mindx git checkout -B main hf/main
sudo -u mindx git log --oneline -1
```
Install it into the existing virtualenv. `--inexact` keeps the extras already installed there
(torch, peft, trl), which a plain `uv sync` would remove:
```bash
cd /home/mindx/mindXtrain && sudo -u mindx /home/mindx/.local/bin/uv sync --inexact --extra ml 2>&1 | tail -2
```
```bash
cd /home/mindx/mindXtrain && sudo -u mindx .venv/bin/mindxtrain serve --help | grep -c 'bankml'
```
**Check:** a number above 0 (the `--to bankml` options are there).
## 6. Tell mindX's mindXtrain to use bankml
mindX starts mindXtrain with its own environment (`/home/mindx/mindX/.env`). Append the bankml
lane (Bonsai-8B is the model on the VPS that is good enough to judge and teach; gen39 is too
small for that):
```bash
cat >> /home/mindx/mindX/.env <<'ENV'
# mindXtrain on bankml (docs/install.md in PYTHAI/mindXtrain)
MINDXTRAIN_BANKML_BASE_URL=http://127.0.0.1:18093/v1
MINDXTRAIN_CHAT_MODEL=bonsai-8b-q1_0
MINDXTRAIN_JUDGE_MODEL=bonsai-8b-q1_0
MINDXTRAIN_TEACHER_BASE_URL=http://127.0.0.1:18093/v1
MINDXTRAIN_TEACHER_MODEL=bonsai-8b-q1_0
ENV
grep -n 'MINDXTRAIN_' /home/mindx/mindX/.env
```
`MINDXTRAIN_BACKEND=bankml` is deliberately not set: with it, the panel would use bankml even
where an `MINDXTRAIN_OPENAI_BASE_URL` is configured. Add it only if bankml should be the only
chat endpoint.
## 7. Restart mindX and confirm
Look at what is inside mindX's cgroup first; a restart ends everything listed there:
```bash
for p in $(cat /sys/fs/cgroup/system.slice/mindx.service/cgroup.procs); do ps -o pid=,args= -p $p; done | cut -c1-120
```
```bash
systemctl restart mindx && echo "restarted at $(date -u +%T); /health answers in 3-4 minutes"
```
```bash
until curl -s -o /dev/null -w '%{http_code}' 127.0.0.1:8000/health | grep -q 200; do sleep 15; done; echo "mindX is up"
```
```bash
tr '\0' '\n' < /proc/$(systemctl show -p MainPID --value mindx)/environ | grep MINDXTRAIN_
```
**Check:** the five `MINDXTRAIN_` lines from step 6.
## 8. Serving the next generation
When a run finishes, put it on bankml (merge, pin byte-identically, layer) in one command. Use
the run's config and tag:
```bash
cd /home/mindx/mindXtrain && sudo -u mindx BANKML_FORKS=/home/mindx/models/registry .venv/bin/mindxtrain serve /path/to/run.yaml --to bankml --tag mindx-gen82 --bankml-bin /home/mindx/bankml-0.3.6/bankml --bankml-system "You are mindX, generation 82." --bankml-param repeat_penalty=1.3 --bankml-param num_ctx=2048 --bankml-stop '<|im_end|>'
```
It prints the model's sha256; `curl -s 127.0.0.1:18093/api/tags` then lists `mindx-gen82`.
---
## Rollback
Each line undoes one step; run only the ones you need.
```bash
B=$(cat /root/LAST_BANKML036_BACKUP); echo "restoring from $B"
```
bankml back to 0.3.5 (steps 2–3):
```bash
cp $B/bankml.service /etc/systemd/system/bankml.service && systemctl daemon-reload && systemctl restart bankml && /home/mindx/bankml-0.3.5/bankml --version
```
gen39's layer (step 4), so `mindx-gen39` is the bare pin's alias again:
```bash
rm -f /home/mindx/models/registry/mindx-gen39.MODEL.json
```
mindX's environment (step 6), then restart mindX as in step 7:
```bash
cp $B/.env /home/mindx/mindX/.env && chown mindx:mindx /home/mindx/mindX/.env
```
mindXtrain back to the GitHub checkout (step 5):
```bash
cd /home/mindx/mindXtrain && sudo -u mindx git checkout -B main github/main && sudo -u mindx git stash pop || true
```
## Troubleshooting
| you see | it means | do |
|---|---|---|
| `cargo: command not found` | the build ran outside `mindx`'s login shell | keep the `sudo -u mindx bash -lc '…'` form |
| step 3 answers `400` | bankml is still 0.3.5 | `grep ExecStart /etc/systemd/system/bankml.service`, then `systemctl daemon-reload && systemctl restart bankml` |
| `bankml create … refuse` | the Modelfile asks for something bankml does not reproduce | the message names it; penalties need 0.3.6 |
| `git fetch hf` fails | the Hub was unreachable | `curl -sI https://huggingface.co/PYTHAI/mindXtrain`, then retry |
| `/health` never turns 200 | mindX did not start | `journalctl -u mindx -n 50 --no-pager` |