0z5a
e58a728b80
feat: version rollout weight updates
...
Track a monotonic policy version across optimizer steps, scheduler updates, and rollout results. Serialize synchronous generation with weight acknowledgements and invalidate reusable prefix KV entries so cached samples remain attributable to the behavior policy that generated them.
2026-09-02 19:01:41 +08:00
0z5a
01bcd0d105
perf: batch ragged prefill requests
...
- Pack prompts with a shared prefix start and attention backend into one forward.
- Select per-request final logits from cumulative query lengths.
- Cover ragged tokens, logprobs, scheduling, and documentation.
2026-09-02 15:00:16 +08:00
0z5a
9c3ef0c2a1
fix: cancel abandoned generation tasks
...
- Propagate stream closure and stop-sequence termination into scheduler cancellation
- Defer active KV release to the scheduler owner and close metrics safely
- Expose lifecycle counters and cover waiting, active, and allocation-race cleanup
2026-09-02 12:55:05 +08:00
0z5a
90de5bc1bd
fix: report failed rollout requests
...
- Return structured finish and error reasons for synchronous generation
- Reject failed online rollout batches instead of training on empty responses
- Verify allocation and extension failures release metrics and KV state
2026-09-02 12:52:50 +08:00
ViperEkura
f252af495c
refactor: remove dead code and deduplicate scheduler setup
2026-08-19 14:58:37 +08:00
ViperEkura
47b3ed4e44
feat: propagate attention backend across scheduler threads
...
- InferenceEngine/Scheduler accept an explicit backend
- capture request-level attn_backend context onto Task
- split prefill/decode batches by backend instance
- ASTR_BACKEND env overrides ContextVar as process-wide policy
- report resolved backend and CUDA-graph state in benchmark
2026-08-09 13:32:40 +08:00
ViperEkura
c1d05ae11d
perf: benchmark decode via real inference engine
...
- route decode benchmark through InferenceEngine generate path
- add enable_cuda_graph toggle to engine, scheduler, and executor
- make benchmark --cuda-graph/--no-cuda-graph control the toggle
- hoist local time imports to module top
2026-08-09 11:47:14 +08:00
ViperEkura
0c1b7664c1
refactor: split infer core into subpackages by concern
...
- Eliminate core/ directory into cache/, runtime/, network/ subpackages plus flat modules
- Split cache.py (647 lines) into cache/{buffer,strategy,pool}.py by layer
- Add explicit ContiguousStrategy, make AllocationStrategy a real ABC
- Move TaskCacheState to cache/strategy.py, drop string forward references
- Rename api/ to network/, server.py to app.py
- Move sample.py into runtime/ alongside executor and graph
- Simplify TaskCacheManager.__init__ to single pool param
- Expose pool.strategy and pool.req_pool as public properties
- Fix KVCache import in attention_backend.py (TYPE_CHECKING guard)
- Fix steady-state decode reading uninitialized position_ids on first step
2026-08-08 23:43:05 +08:00
ViperEkura
2196c34c52
refactor: 重构 inference 模块架构,引入设计模式并分组文件
...
- 新增 protocol.py 协议层,Template Method 模式消除流/非流分支 45% 重复
- SSEBuilder 统一 SSE 构造,StopChecker 独立 stop_sequence 检测
- AnthropicHandler 追踪已产出文本,修复 stop 时重复 delta
- server.py 路由从约 100 行缩减至 3 行
- 拆分为 core/(cache/executor/scheduler/task)和 api/(protocol/server)
- 外部保持二级导入路径(from astrai.inference import Name)
- 删除所有分隔线注释,代码按语义自然分组
2026-05-14 17:42:37 +08:00
ViperEkura
6269bacfc3
refactor: decode 按页分桶批处理,position_ids 改为 per-task 构建
2026-05-14 14:22:11 +08:00
ViperEkura
df0845e916
chore: 解耦 Executor/Scheduler/TaskManager,修复 stop 页泄漏,移除 ServerState 全局单例
2026-05-12 13:47:55 +08:00
ViperEkura
38e18fdfd3
refactor: PagedCache Facade 模式,提取 PagePool/PrefixCache/TaskTable
...
- cache.py: 提取 PagePool (位图+LRU)、PrefixCache (前缀哈希)、TaskTable (任务页表)
PagedCache 降为 Facade 组合三者 + 张量存储,公开 API 不变
- executor.py: 移除 allocate_pages_for_activation/free_task_pages/get_cached_tokens
三冗余委托方法,去掉 page_size 构造参数(改用 page_cache.page_size)
- scheduler.py: 直接调用 self._page_cache.* 代替已移除的 Executor 委托
- 移除 CacheView.__slots__、PagePool.ref_count、PagedCache.alloc/pages_needed/inc_ref
PrefixCache.evict 等死/冗余方法
2026-05-11 15:22:21 +08:00
ViperEkura
4753958f92
refactor: 页状态移入 PagedCache,Task 纯化为域对象
...
- PagedCache 增 task_alloc/task_free/task_extend/task_cached/task_record_hashes/make_table_tensor
- Task 移除 page_table/n_pages/_prefix_cached_tokens/_pages_freed
- Executor 移除 _PageState,页操作全部委托 PagedCache
- CacheView.gather 截断逻辑下沉到 PagedCache.gather
- 各类补充单行职责 docstring
2026-05-11 14:42:39 +08:00
ViperEkura
73d6cc0f26
refactor: TaskManager 剥离页管理,STOP 移至 task.py
...
- TaskManager 移除 page_cache/page_size 依赖,增 pull_candidates/activate/return_to_waiting
- Executor 增 allocate_pages_for_activation/free_task_pages,承接全部页操作
- STOP 从 cache.py 移至 task.py
- scheduler loop 显式装配: 清理→释页 / 拉取→分配→激活
- sampling.py → sample.py
2026-05-11 14:04:31 +08:00
ViperEkura
317ed90bac
refactor: 拆分 scheduler 为 TaskManager + Executor
...
- InferenceScheduler 退化为编排器,委托 TaskManager 管理任务生命周期 + Executor 执行模型前向
- Task/TaskStatus/TaskManager 移至 task.py
- Executor 移至 executor.py (原 BatchExecutor)
- scheduler.py 437 行 -> 142 行
2026-05-11 13:50:11 +08:00
ViperEkura
a58fab8d6e
fix: max_seq_len 检查改为仅 prompt 超限发 STOP,max_tokens 超出部分 clamp
2026-05-10 20:17:47 +08:00
ViperEkura
a3c8296135
fix: page cache 分配失败越界崩溃 + 长度超限终止
...
- astrai/inference/scheduler.py: add_task 增加 max_seq_len 检查,超限时直接发 STOP 信号终止
- astrai/inference/scheduler.py: _maybe_alloc_page 返回 bool,alloc 失败时标记 ABORTED + 发 STOP
- astrai/inference/scheduler.py: _execute_decode 过滤分配失败任务,避免 page_table 越界
- astrai/inference/scheduler.py: _remove_finished_tasks 清理 ABORTED 任务并释放 pages
- astrai/inference/scheduler.py: _execute_prefill input_mask 改为覆盖全部 prompt_len
- astrai/model/transformer.py: seq_mask is None 分支补全 start_pos + seq_len 列
2026-05-10 20:14:38 +08:00
ViperEkura
c95ace41aa
fix: prefill 时 attention mask 长度不足导致 expand 崩溃
...
- astrai/inference/scheduler.py: prefill input_mask 由 [batch, seq_len] 改为 [batch, prompt_len],覆盖全部 KV 位置
- astrai/model/transformer.py: seq_mask is None 分支补全 start_pos + seq_len 列,避免 expand 非 singleton 维度不匹配
2026-05-10 19:56:41 +08:00
ViperEkura
cffedaad5e
perf: 消除非流式推理 CPU 空转并减少 decode GPU 张量冗余分配
...
- engine.py: _Result 改用 threading.Condition.wait_for 替代
Event busy-wait,非流式模式线程被内核挂起而非 1760 万次空转
- scheduler.py: _execute_decode 将 temperature/top_k/top_p 张量
移至循环外预先分配,避免每步重复 torch.tensor();input_ids
改用 torch.empty 避免不必要的 zero 初始化(两处均为完全覆盖)
- _execute_prefill: input_ids 同改为 torch.empty
2026-05-10 15:32:11 +08:00
ViperEkura
3583c46b66
feat: 推理引擎前缀缓存(KV cache 复用)
...
- cache.py: 新增模块级 page_hash() 多项式滚动哈希函数;PagedCache 新增
record_page/lookup_prefix/inc_ref,free() 自动清理哈希映射
- scheduler.py: Task 新增 _prefix_cached_tokens;_refill_active_batch 先查
缓存命中页(inc_ref)再分配剩余页;合并 _execute_prefill 为单一方法,
按 (prompt_len, start_pos) 分组批量执行全量/部分 prefill;
_record_page_hashes 注册完整页哈希;修复 device/dtype 默认值从硬编码
改为 None(自动检测模型设备)
- test: mock model 补充 dtype/device 适配自动检测
2026-05-09 23:53:57 +08:00
ViperEkura
db99d8b254
fix: 修复文档多处不准确 + inference scheduler 越界 bug + SchedulerCallback 回调阶段修正
...
文档 (6 个文件):
- design.md: 15+ 处修正 — persistent_key_values→paged_cache,
MLA 字段重写, Server/ParallelSetup 不存在类移除,
关系箭头方向修复, SchedulerCallback 阶段修正等
- dataflow.md: 重写数据流图和描述, 修复训练回调顺序、
数据键名、MLA 归属、MetricTracker 等错误
- introduction.md: 层数 32→24, MLP 图双 Linear 修正,
默认值/响应字段/health 端点修复
- params.md: 补充 grpo 及 4 个 GRPO 参数
- README.md / README-zh-CN.md: generate.py 补全必需参数,
删除重复注释, HuggingFace 声明修正
代码 (2 个文件):
- scheduler.py: n_pages 池加 page_size 余量防止越界;
decode 前预分配页
- train_callback.py: SchedulerCallback 从 on_step_end 改
回 on_batch_end (按 batch 步进学习率)
2026-05-09 15:40:17 +08:00
ViperEkura
283bcaf2ff
fix: 修复 CLI 参数缺失/重复、device_ids 越界、generate 参数名不一致、scheduler 时序、非流式截断等 bug
...
- train.py: 补上 --batch_size、--grpo_clip_eps,删除 3 处重复 --group_size
- generate.py: --model_dir 改为 --param_path 对齐 README
- automodel.py: from_pretrained 新增 strict 参数(默认 True)
- parallel/setup.py: 修复 device_ids 索引越界
- train_callback.py: scheduler.step() 移至 on_step_end
- test_train_strategy.py: 测试中补 optimizer.step()
- engine.py: 非流式改为循环等待所有任务完成,补 remove_task 清理
- scheduler.py: Task 添加 _pages_freed 标志,杜绝双重释放
- trainer.py: accumulation_steps=0 时 clamp 为 1
- tokenizer.py: save_pretrained 添加 _tokenizer is None 检查
- benchmark.py: 修复 ModelConfig 过时 import 路径
- inference/__init__.py: 修复 stale docstring
2026-05-09 14:36:42 +08:00
ViperEkura
6ed0506491
fix: 减少调度器延迟 — 移除解码路径 5ms 睡眠,修复 refill 任务丢失 bug
2026-05-08 21:13:52 +08:00
ViperEkura
30cc2d67a4
refactor: 分页 KV cache 替换固定 slot,删除 PrefixCache 及相关死代码
...
- 用 PagedCache + CacheView 替换固定 slot 式 KV cache,attention 层只通过 page_table 间接索引
- 删除 PrefixCache(radix tree)及 scheduler 中所有 prefix cache 命中/插入/释放逻辑
- 删除无用函数:pin、version、free_count、_mark_seq_mask 及 seq_mask 分配
- 修复 write 在多页 prefill 时 offset 为负导致 chunk 计算错误
- _make_page_table_tensor 改用 list 拼接一次 tensor,去掉逐元素赋值
- 清理 model 接口参数:kv_cache, slot_indices → paged_cache(CacheView)
- 精简 docstring 为单行,删除冗余 section 注释和旧代码
- 修复 test_scheduler_concurrency.py 缺少 import pytest
2026-05-08 20:44:05 +08:00
ViperEkura
7ddebf2cd9
refactor: 统一采样路径为 Strategy + batch tensor,删除 apply_sampling_strategies
...
- TemperatureStrategy / TopKStrategy / TopPStrategy 支持 Union[float, Tensor]
- SamplingPipeline.sample() 一条调用完成 apply + softmax + multinomial
- 新增 sample() 独立函数作为 scheduler 入口
- scheduler decode 改为 batch tensor 参数传递,支持任意 batch size
- 删除 apply_sampling_strategies(被 sample() 取代)
2026-05-08 19:07:14 +08:00
ViperEkura
44d7a4e959
refactor: 设计模式优化 inference 模块导入结构
...
- 新建 cache.py:SlotAllocator 对象池 + PrefixCacheManager
- 新建 sampling.py:Temperature/TopK/TopP 可组合策略
- TaskStatus 改用 Enum,GenerationParams 值对象模式
- _STOP 移至 cache.py,解除 engine→scheduler 轻量耦合
- 更新测试导入路径,ruff 格式检查通过
2026-05-08 16:57:57 +08:00
ViperEkura
c4401512f2
fix: 修复长对话截断方向错误,保留最新 token 而非最早
...
- add_task 中 prompt 超长时改为保留末尾 token(prompt_ids[-max_prompt_len:])
而非开头 token,确保多轮对话时模型能看到最近的提问上下文
2026-05-08 15:52:48 +08:00
ViperEkura
a6f5ff3b37
fix: 修复 remove_task 未释放 KV cache slot 导致第二轮对话死锁
...
- remove_task() 现在释放 KV cache slot 和 prefix cache 引用
- _refill_active_batch 中 alloc 失败时将剩余 task 推回 waiting_queue
- 主循环增加 try/except 异常兜底,发送 _STOP 给所有 task
- 重构:server.py 全局变量改为 ServerState 类;automodel.py
使用 Registry 替代裸 dict;合并 TrainContextBuilder 的 with_*
方法到 build()
2026-05-08 14:53:04 +08:00
ViperEkura
ffff05b2c6
refactor: 替换魔法字符串为_STOP sentinel,修复generator清理逻辑
2026-05-06 20:37:16 +08:00
ViperEkura
b89f8436ea
refactor: 将KV缓存槽位映射下沉到模型注意力层,移除_remap_kv和_writeback_kv
2026-05-06 20:01:22 +08:00
ViperEkura
123f25e339
fix: 修复KV缓存槽位索引错位、版本校验缺失与注意力掩码问题,合并预填充方法
2026-05-06 19:51:14 +08:00
ViperEkura
520de3ebe8
refactor: 重构推理引擎控制逻辑,修复连续批处理核心缺陷
...
- 修复 decode 阶段新任务覆盖已有任务的严重缺陷
- 修复线程安全问题(热路径无锁竞争)
- 修复前缀缓存引用计数管理不当导致缓存被驱逐
- 修复 pad_id 缺失导致全量 prefill 崩溃
- 修复 RoPE 位置错乱(不同位置任务共用 start_pos)
- 新增 slot 版本追踪实现前缀缓存零拷贝复用
- 新增异步流式生成接口避免阻塞事件循环
- 添加完整英文文档字符串
2026-05-06 16:04:06 +08:00
ViperEkura
29beb174a5
fix: 修复删除节点问题
2026-04-09 16:58:29 +08:00
ViperEkura
bbeaff4c60
refactor: 精简推理引擎代码,优化参数传递规范
2026-04-09 14:17:48 +08:00
ViperEkura
ab5e207f42
feat: 增加缓存处理
2026-04-08 20:54:14 +08:00
ViperEkura
39766aa1dc
chore: 修改类名,优化导入顺序
2026-04-05 22:27:57 +08:00
ViperEkura
e58dbd7c57
chore: 精简实现代码部分
2026-04-05 21:16:38 +08:00
ViperEkura
d2fe8afbd1
chore: 更新文档, 修正代码格式
2026-04-05 20:59:52 +08:00
ViperEkura
23ce4bc3ae
fix: 修复异常处理问题
2026-04-05 20:44:35 +08:00
ViperEkura
fc278d17ab
feat: 实现模型动态注册机制
2026-04-05 19:38:12 +08:00
ViperEkura
2b26f03bd3
refactor: 拆分engine.py 文件
2026-04-05 00:07:21 +08:00