File size: 9,222 Bytes
730c5bb
 
9c5dc6c
730c5bb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
# 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 that do four things:

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` |