Repository navigation
Releases: formetaohy/Neura
Releases · formetaohy/Neura
Release list
v0.7.4
Full Changelog: v0.7.3...v0.7.4
v0.7.2
v0.7.1
v0.7.0
Changes since v0.6.0
- ci(release): create a release from a pushed tag - gate the release on the full CI workflow - check that the tag matches the workspace version - write the release notes from the commit log since the previous tag
- feat(gpu): borrow the native device of a host
- docs(examples): simplify the qwen readme - drop the framework and serving notes - keep the run command, arguments, raw prompt and quant support
- refactor(examples): let qwen own its model code - delete the neura-model crate - move the qwen35 config, model, layers and pre-tokenizer into examples/qwen - drop the model-only ci steps
- refactor: elide lifetimes the compiler infers - collapse the plan walk lifetimes onto one - elide the shader address pass tie - drop
'staticfrom constant tables - elide the intrinsic arity check lifetime - refactor(graph): drop the value lifetime brand - remove the
'gparameter fromValue,Graph, and every layer that carried it - refuse a tensor of another graph inGradients::ofandGraph::tracked- add a test pinning the cross-graph refusal - test(template): render a synthetic transcript instead of a model template - drop the qwen35 template fixture and its expected texts - add a transcript template that walks the same jinja subset - keep every expected render as jinja2 draws it
- feat(model): lift qwen3.5 into its own crates - add neura-tokenizer: byte level bpe over a gguf vocabulary - add neura-template: render the chat template a gguf names - add neura-decoder: weights, norms, rope, cache and greedy choice on the graph - add neura-generate: drive a prompt into text - add neura-model: qwen35 behind a feature of its own - read gguf metadata through typed accessors
- fix(examples): run qwen3.5 as its gguf defines - split the runner into config, chat, tokenizer, model and layers - write kv cache rows by head and capacity, not by position - decay the delta net state by the stored ssm_a - wrap prompts in the template's empty think block - pre-tokenize by the qwen35 classes and special tokens
- docs(examples): describe the qwen gguf runner
- feat(examples): run a qwen3.5 gguf through the framework - read the model from metadata and gguf tensor names inside the example - decode with gated delta net, full attention and a tied head, keeping kv and state resident
- refactor(ggml): keep the block formats the common quants pack - drop q4_0, q4_1, q5_0, q5_1, q2_k, q3_k and mxfp4 storage - keep q8_0, q4_k, q5_k and q6_k, the kinds q4_k_m, q6_k and q8_0 files hold
- fix(graph): gather rows out of a quantized table - read a block packed table row by row into exact storage - hold a gathered row of a quantized table as single precision
- feat(gguf): read ggml block weights natively - add neura-source for named tensor sources and neura-gguf for GGUF v3 files - make eleven ggml block formats first-class elements with host codecs and device fetches - pour any source into the weight store and drop the streamed load variants
- perf(conv): read input channels together
- perf(conv): read a row window once per tap row
- perf(profile): budget the registers of every device program
- feat(attention): add an additive bias operand - carry the bias from AttentionOptions through the ABI task record, the plan reads and the four attention bodies - refuse a quantized, dynamic, trained or mistyped bias at the graph - weigh the bias reads into the task work and cover the forward, gradients, segmented path and refusals with tests
- perf(attention): fill the device with key sections - walk half a workgroup of rows per forward task when the key chain spans sixty-four blocks - part the key range into balanced sections and fold them back with the row fold - leave short key chains and segmented shapes on the rows the plan already asked for - answer a fallible tile fit instead of panicking before the plan picks a tile - cover the balanced sections, the long chain and the short chain with tests
- perf(kernel): stage the output a key gradient reads - hand every attention tile a count of the panels its bodies stage - ask the plan for the panel a key gradient recomputes with - read the staged forward output where the pool holds the third panel - cover the tile accounting and the key gradient decision with tests
- perf(plan): rank choice rows through one thread - add a thread row walk to top_k and sample - pick the choice body from the rounds each walk spends - cover the narrow row walks with reference tests
- perf(plan): pick the softmax body by rounds - choose the softmax row walk from the rounds each body spends - stream a narrow row through one thread in four wide loads - cover the narrow softmax and its gradients with reference tests
- perf(plan): size the choice row walk by its rounds
- perf(plan): split a starved row by idle workgroups - size the fold's pieces from its body so a starved row splits by column - add ChoiceFold beside the sectioned argmax and categorical tasks - fold the section candidates by value and class, keeping each column's gumbel - narrow the section and fold regions so every column section stays in one wave - part rows that leave the device idle and keep whole rows otherwise - cover the starved cuts with reference, chain and plan tests
- perf(plan): stop welding producers into one workgroup - remove the merge placement so a consumer opens a wave beside the producers it reads - drop the ancestry, work, created, rebuilt and merge spread bookkeeping from the packer - order the packer by dependency waves alone, keeping the lone consumer fold for single chains - pin one task per workgroup segment with a softmax backward plan test
- perf(softmax): split a starved row by column - add SoftmaxFold and SoftmaxGradFold beside the sectioned softmax tasks - walk one column section per task and fold each row's max and mass - fold the gradient's row dot and the log softmax normalizer in a second stage - narrow the section, fold and apply regions so every section stays in one wave - cover the starved cuts with reference, precision and plan tests
- perf(choice): split a starved row by column - add TopKFold and SampleFold beside the chunked selection tasks - walk one column section per task and fold the candidates by value and class - fold the sample nucleus from per-section max and mass, keeping the gumbel per candidate - narrow the partial and fold regions so every column section stays in one wave - size the choice fold seats from the profile shared budget - cover the starved cuts with reference and plan tests
- perf(attention): split starved attention by key - split a starved attention's keys across tasks and fold the partials - add the attention fold kinds and a per-task key section beside the causal slot - fold forward partials by max rescale and query gradient partials by sum - narrow the partial and fold regions so the key sections stay in one wave - cover the starved forward and its gradients with reference and plan tests
- feat(window): add dilation to the window geometry - add a dilation beside reach, stride and padding, with spans and validation - walk convolution, transposed convolution, weight gradient and pooling taps by it - carry the dilation through the task record and the plan - cover dilated walks and gradients with device reference tests
- perf(choice): rank a row once per candidate round - rank each row once per round of four candidates instead of once per candidate - merge per-thread candidate seats through a tournament in shared memory - size the choice scratch from the profile shared budget - add a top-k test whose largest numbers stand in one strided share
- fix(graph): compute view strides from axis rank - keep each view axis rank instead of a source axis permutation - derive a stride from the dims of the axes ranked inside it - read strides in the plan and the device from dims and rank alone - rename the ABI value record field source to rank - cover head plane views, gradients and counted extents with tests
- feat(attention): split a key block across groups - hand each group a run of keys with its own softmax - combine group partials in workgroup scratch - pad a split tile's panel against bank conflicts - split only where whole rows leave the device idle
- feat(tensor): add a row-wise k selection op - add Kind::TopK, Graph::top_k and the device kernel that keeps a row's largest numbers - move the candidate ceiling into the abi as CANDIDATES - schedule every row through its own workgroup and account the work by candidates - cover the host reference, ties, bindings, profiles, backends and refusals in tests
- feat(init): add normal and fan-aware initializers - add Init::Normal, Init::Xavier and Init::Kaiming - resolve a fan-aware init through Init::spread at the layer that holds it - spread the fan of Linear, Conv2d, ConvTranspose2d, Adapter and MultiHeadAttention - cover the distributions, the fan formulas and the refusals in tests
- feat(conv): add trainable transposed convolution - add Kind::Conv2dTranspose over the conv input-gradient kernels - expose Graph::conv2d_transpose with groups and shape checks - differentiate it into Conv2d and Conv2dWeightGrad - schedule it through the gradient path, paged weights included - add the ConvTranspose2d layer - cover forward, gradients, grouping and paging in tests
- perf: pick one DX12 adapter and hold test devices
- refactor(gpu): list backends in preference order - replace the Backends mask with one ordered Backend list and an optional GpuRequest field - refuse a backend a build does not carry with GpuUnavailable::BackendMissing - compile Metal alone on macOS and drop the platform cfg table - test the default order, a named backend and a missing one
- fix(gpu): release unowned shared devices - replace the owning device pool with a weak registry - validate completion before destroying Vulkan resources - test concurrent ownership and cache reuse across devices
- refactor: unify shader writers and crate layout - merge the HLSL and MSL writers into o...