Wrapper Python isolado para Mamba/Attention do NSOS com streaming incremental padrao.
Project description
NSOS Mamba
nsos-mamba é um wrapper Python para usar somente o runtime neural
Mamba/Attention do NSOS. Ele já configura:
- Mamba-2 faithful;
- streaming incremental por padrão;
- GPU automática quando disponível;
- fallback para CPU;
- treino supervisionado simples
prompt -> resposta; - datasets em memória, JSON e JSONL;
- modo ternário/QAT opcional.
Instalação
pip install nsos-mamba
Runtime nativo
O pacote precisa do runtime nativo nsos_ext.
Na versão Windows/Python 3.11 publicada como wheel binária, o pacote já pode vir com runtimes embutidos:
nsos_ext_cuda...pyd, quando CUDA está disponível;nsos_ext_cpu...pyd, como fallback CPU.
Se você tiver um nsos_ext próprio, aponte para ele assim:
set NSOS_EXT_PATH=C:\caminho\para\nsos_ext
ou, no Python:
import os
os.environ["NSOS_EXT_PATH"] = r"C:\caminho\para\nsos_ext"
No Colab:
import os
os.environ["NSOS_EXT_PATH"] = "/content/nsos_ext_mambavs"
Configuração do modelo
from nsos_mamba import MambaModuleConfig, NSOSMamba
cfg = MambaModuleConfig(
vocab_size=128,
num_layers=12,
d_model=128,
device="auto",
streaming=True,
)
model = NSOSMamba(cfg)
Campos principais:
vocab_size: tamanho do vocabulário.num_layers: número de camadas.d_model: largura do modelo.d_state: tamanho do estado SSM. Padrão:64.max_context_tokens: contexto máximo. Padrão:4096.device:"auto","gpu","cuda"ou"cpu".streaming: ativa decode incremental. Padrão:True.allow_cpu_fallback: se GPU falhar, cai para CPU. Padrão:True.
Variáveis de ambiente:
NSOS_MAMBA_DEVICE=auto
NSOS_MAMBA_STREAMING=1
NSOS_MAMBA_LAYERS=12
NSOS_MAMBA_DMODEL=128
NSOS_MAMBA_DSTATE=64
NSOS_MAMBA_CONTEXT=4096
Mamba puro ou Mamba + Attention
Por padrão, o pacote expõe Mamba puro:
cfg = MambaModuleConfig(vocab_size=128, use_attention=False)
Para ativar Attention junto com Mamba:
cfg = MambaModuleConfig(
vocab_size=128,
use_attention=True,
attention_period=2,
attention_slot=1,
)
Interpretação:
use_attention=False: só Mamba.use_attention=True: Mamba + Attention.attention_period: frequência das camadas de atenção.attention_slot: posição da atenção dentro do período.
O wrapper não ativa MoE, KAN, TTT, CHRASS, MCTS nem memória externa.
Modo ternário/QAT
Para treinar usando QAT ternário:
cfg = MambaModuleConfig(
vocab_size=128,
ternary=True,
ternary_warmup_steps=100,
ternary_start_step=300,
ternary_regularization=1e-3,
)
Ou por chamada de treino:
model.fit_text_pairs(pairs, tokenizer, qat=True)
Campos:
ternary: liga o QAT ternário.ternary_warmup_steps: passos iniciais antes do regularizador.ternary_start_step: passo em que o forward passa a usar fake-quant.ternary_regularization: força do regularizador para pesos ternários.
Observação prática: QAT ternário normalmente não acelera o treino. Ele adiciona fake-quant e STE. O benefício esperado é memória/deploy/quantização, não necessariamente steps/s durante treinamento.
Exemplo mínimo: "Quem é você?" -> "Oxta"
from nsos_mamba import CharTokenizer, MambaModuleConfig, NSOSMamba, TextPair
pairs = [
TextPair("Quem é você?", "Oxta"),
TextPair("quem é você?", "Oxta"),
TextPair("Quem e voce?", "Oxta"),
]
tokenizer = CharTokenizer.from_texts(
[p.prompt for p in pairs] + [p.answer for p in pairs]
)
cfg = MambaModuleConfig(
vocab_size=tokenizer.vocab_size,
num_layers=12,
d_model=128,
device="auto",
streaming=True,
)
model = NSOSMamba(cfg)
model.fit_text_pairs(
pairs,
tokenizer,
steps=1200,
batch_size=16,
learning_rate=3e-3,
callback=lambda step, loss: print(f"[train] step {step} loss~{loss:.4f}"),
)
result = model.generate_text("Quem é você?", tokenizer, max_new_tokens=8)
print("resposta:", repr(result.text))
print("tokens/s:", result.decode_tokens_per_sec)
Saída esperada:
resposta: 'Oxta'
Exemplo de comandos/redirect
Dataset em memória:
pairs = [
TextPair("aic", "/redirect aic"),
TextPair("painel", "/redirect dashboard"),
TextPair("login", "/redirect auth"),
TextPair("ajuda", "/redirect help"),
]
Uso:
tokenizer = CharTokenizer.from_texts(
[p.prompt for p in pairs] + [p.answer for p in pairs]
)
model = NSOSMamba(MambaModuleConfig(vocab_size=tokenizer.vocab_size))
model.fit_text_pairs(pairs, tokenizer, steps=1000, batch_size=16)
print(model.generate_text("aic", tokenizer, max_new_tokens=32).text)
# /redirect aic
Streaming incremental e velocidade
Streaming é o padrão. O fluxo é:
- processa o prompt uma vez (
prefill); - gera os próximos tokens passando só o último token;
- reaproveita o estado interno do modelo.
Benchmark:
prompt_ids = tokenizer.encode("Quem é você?", bos=True)
bench = model.benchmark_decode(prompt_ids, max_new_tokens=1024, repeats=5)
bench.print()
Métricas:
prefill_ms: tempo para processar o prompt.first_incremental_ms: primeiro passo incremental após o prefill.decode_tokens_per_sec: tokens/s do decode incremental.end_to_end_tokens_per_sec: tokens/s incluindo prefill.
Datasets
Lista em memória
pairs = [
TextPair(prompt="Quem é você?", answer="Oxta"),
TextPair(prompt="Qual seu nome?", answer="Oxta"),
]
JSON
dataset.json:
[
{"prompt": "Quem é você?", "answer": "Oxta"},
{"prompt": "Qual seu nome?", "answer": "Oxta"}
]
from nsos_mamba import load_text_pairs_json
pairs = load_text_pairs_json("dataset.json")
Também aceita:
{"data": [{"prompt": "...", "answer": "..."}]}
ou:
{"examples": [{"prompt": "...", "answer": "..."}]}
JSONL
dataset.jsonl:
{"prompt": "Quem é você?", "answer": "Oxta"}
{"prompt": "Qual seu nome?", "answer": "Oxta"}
from nsos_mamba import load_text_pairs_jsonl
pairs = load_text_pairs_jsonl("dataset.jsonl")
Observações
CharTokenizerserve para testes, demos e dados sintéticos pequenos.- Para treino real, use um tokenizer próprio.
- O pacote é uma camada de uso sobre
nsos_ext; não é uma reimplementação em Python.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nsos_mamba-0.1.1-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: nsos_mamba-0.1.1-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee309665320f37005a5c04945713ae64b13ce9a89ea34570e5db2433b2f69f99
|
|
| MD5 |
b4b5aeaa5e55186e45738409aef27f31
|
|
| BLAKE2b-256 |
21dbabee7d593452c54ae3b1163e19c665e798f51e56ec9e089a3bc87941fb39
|
File details
Details for the file nsos_mamba-0.1.1-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: nsos_mamba-0.1.1-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7635111e571cca465e767e0810b3beac909b2a7dbc12cd54cf3864aa85b3b2b
|
|
| MD5 |
3715e5d294ce434c88794922668027e8
|
|
| BLAKE2b-256 |
976a791a076868a6ef222bfa1d0da4f8445293d4748a82bf1f808f7d457355a9
|