Skip to main content

Wrapper Python isolado para o módulo Mamba do NSOS com streaming incremental padrão.

Project description

NSOS Mamba

nsos-mamba é um wrapper Python simples para usar apenas o módulo Mamba do NSOS. Ele configura automaticamente o modelo em modo Mamba-2 faithful, ativa streaming incremental por padrão e oferece utilitários pequenos para treinar pares prompt -> resposta.

Este pacote não instala o runtime nativo nsos_ext. Antes de usar, compile ou copie o nsos_ext.so/nsos_ext.pyd e deixe-o acessível via PYTHONPATH ou pela variável NSOS_EXT_PATH.

Instalação

pip install nsos-mamba

Se o nsos_ext estiver em uma pasta separada:

export NSOS_EXT_PATH=/caminho/para/nsos_ext

No Colab:

import sys, os

sys.path.insert(0, "/content/nsos_ext_mambavs")
# ou:
os.environ["NSOS_EXT_PATH"] = "/content/nsos_ext_mambavs"

Configurações principais

from nsos_mamba import MambaModuleConfig

cfg = MambaModuleConfig(
    vocab_size=128,
    num_layers=12,
    d_model=128,
    device="auto",
    streaming=True,
)

Campos mais usados:

  • vocab_size: tamanho do vocabulário.
  • num_layers: número de camadas Mamba.
  • d_model: largura do modelo.
  • d_state: tamanho do estado SSM. Padrão: 64.
  • max_context_tokens: limite de contexto. Padrão: 4096.
  • device: "auto", "gpu", "cuda" ou "cpu".
  • streaming: ativa decode incremental. Padrão: True.
  • allow_cpu_fallback: se a GPU falhar, cai para CPU. Padrão: True.

Variáveis de ambiente equivalentes:

NSOS_MAMBA_DEVICE=auto
NSOS_MAMBA_STREAMING=1
NSOS_MAMBA_LAYERS=12
NSOS_MAMBA_DMODEL=128
NSOS_MAMBA_DSTATE=64
NSOS_MAMBA_CONTEXT=4096

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"),
]

tok = CharTokenizer.from_texts(
    [p.prompt for p in pairs] + [p.answer for p in pairs]
)

cfg = MambaModuleConfig(
    vocab_size=tok.vocab_size,
    num_layers=12,
    d_model=128,
    device="auto",
    streaming=True,
)

mamba = NSOSMamba(cfg)

mamba.fit_text_pairs(
    pairs,
    tok,
    steps=1200,
    batch_size=16,
    learning_rate=3e-3,
    callback=lambda step, loss: print(f"[train] step {step} loss~{loss:.4f}"),
)

result = mamba.generate_text("Quem é você?", tok, max_new_tokens=8)

print("resposta:", repr(result.text))
print("tokens/s:", result.decode_tokens_per_sec)

Saída esperada:

resposta: 'Oxta'

Streaming incremental

O streaming incremental é o padrão. O fluxo usado é:

  1. processa o prompt uma vez (prefill);
  2. gera cada token novo passando apenas o último token;
  3. reaproveita o estado interno do modelo.

Benchmark:

prompt_ids = tok.encode("Quem é você?", bos=True)
bench = mamba.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

from nsos_mamba import TextPair

pairs = [
    TextPair(prompt="Quem é você?", answer="Oxta"),
    TextPair(prompt="Qual seu nome?", answer="Oxta"),
]

JSON

Arquivo dataset.json:

[
  {"prompt": "Quem é você?", "answer": "Oxta"},
  {"prompt": "Qual seu nome?", "answer": "Oxta"}
]

Uso:

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

Arquivo dataset.jsonl:

{"prompt": "Quem é você?", "answer": "Oxta"}
{"prompt": "Qual seu nome?", "answer": "Oxta"}

Uso:

from nsos_mamba import load_text_pairs_jsonl

pairs = load_text_pairs_jsonl("dataset.jsonl")

Observações

  • CharTokenizer é para testes, demos e dados sintéticos pequenos.
  • Para treino real, use um tokenizer próprio do projeto.
  • O pacote expõe o Mamba isolado; não ativa Attention, MoE, KAN, TTT, CHRASS, MCTS ou memória externa.
  • O pacote é uma camada de uso sobre nsos_ext, não uma reimplementação em Python.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nsos_mamba-0.1.0.tar.gz (11.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nsos_mamba-0.1.0-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file nsos_mamba-0.1.0.tar.gz.

File metadata

  • Download URL: nsos_mamba-0.1.0.tar.gz
  • Upload date:
  • Size: 11.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for nsos_mamba-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7b550cbfb2a78914568484583dfb01e6c151da1e93f4f5223d1ec94d4a58824a
MD5 4bf2e95ea6b983937b48eb0f5b22bc2d
BLAKE2b-256 f590e2deb4763ab84f7ea6cdd09f7b123606ae01c7c3334c8dd93bf9bbcda61a

See more details on using hashes here.

File details

Details for the file nsos_mamba-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: nsos_mamba-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for nsos_mamba-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 acdf5ae385a120aae41ee6ae501c3416a2d938973d68d0b36bbd2175bd15e4c0
MD5 0f45b7cefeb4e302db0c2e0773fbaeaf
BLAKE2b-256 1d5366cc12761afb6ad966a13d8daac8d423b370c51c269cdeb862533c854774

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page