海光DCU适配:SCNet环境矩阵/DTK兼容结论/部署工具链/实测速度与踩坑文档 - #53
Closed
youayou-Lee wants to merge 16 commits into
Closed
youayou-Lee wants to merge 16 commits into
youayou-Lee wants to merge 16 commits into
Conversation
- setup/start 脚本双版本: NVIDIA(vLLM NER 路径) 与 DTK(transformers 自包 NER 路径) - 幂等设计, 串行拉起+健康等待, tmux 会话管理 - DTK 版内置 10 个实测坑修复(env.sh source/-u 冲突/--target 依赖隔离/ DTK torchvision/SDPA eager/.env 路径软链/OCR_REQUIRE_GPU 内联等) - 凭据脱敏: 平台代理经 SCNET_PROXY_URL 环境变量注入, 不入库 - 模型/PaddleX/MIOpen 缓存均可指向平台持久卷, 跨实例零重下 Ref #2, Ref #3
HaS 模型 generation_config.eos 指向 <|endoftext|>(151643), 而对话实际以 <|im_end|>(151645) 结束, 自包 transformers 服务每次生成拉满 max_tokens (管道分块调用下单页 NER 可达数分钟), 且输出复读污染解析。 修复后: 单块 66s→1.2s, finish=stop; 附启动预热(消除重启后首请求 ~60s 算子 JIT)与九步端到端冒烟测试。 Closes #1
- C1: pack_upload yoloe 权重改可选, 干净检出不再炸(附带 M7/M8 排除项) - I1: setup_cloud 补 backend/.env 软链(L20 路径 LA 静默 offline 根因) - I2/I3: bootstrap 幂等标记改锚注释 + SCNET_PROXY_URL 强制守卫 + set -euo - I4/M5: e2e 重写为 20 项硬断言(含 finish=stop/敏感串消除), 失败非零退出 - I5: venv 安装改印章式幂等(半失败不再被永久跳过) - I6: requirements 前置存在性守卫(防静默装空) - I7/M9: README 与脚本行为对齐 + 补两教程链接 + 服务暴露安全提示 - I8: 持久卷挂载哨兵告警 - M3/M4: NER unk-token 守卫 + finish_reason 边界修正 验证: K100_AI 实例 E2E 20 项断言全绿(管道 25.1s), bash -n×7 / py_compile×2 通过
feat: 海光 DCU (DTK 26.04) 部署工具链 + NER 生成不终止修复
* fix(parser): 扫描型 PDF 带内嵌 OCR 文本层时误判为文本型,导致敏感信息漏识别 - 新增整页扫描图覆盖检测:页面存在覆盖 >=90% 的整页图片即视为扫描页, 扫描页占多数则整份 PDF 走视觉链路(OCR/VLM),不再信任低质量 OCR 文本层 - 新增文本层碎片化检测:断行严重(平均行长短 + 超短行占比高)的页面 占多数时同样按扫描件处理 - 保留原有平均文本密度阈值作为兜底 Fixes #5 * fix(vision): 扫描页的内嵌 OCR 文本层字符数充足时仍被视觉链路采用,需回退图像 OCR 上一提交只修了文件级判定(_parse_pdf),但视觉链路每页还有一次 '文本层优先'探测(_detect_with_pdf_text_layer),只按字符数是否 >= PDF_TEXT_LAYER_MIN_CHARS 判断——扫描件内嵌 OCR 文本层每页几百字符, 远超阈值,于是即使整份文件已判为 PDF_SCANNED,逐页仍会用坏文本层识别。 - _detect_with_pdf_text_layer 新增扫描页判定(整页图片覆盖 / 文本层碎片化),命中即抛 ValueError 走既有图像 OCR 回退 - 稀疏探测缓存把扫描页记为强信号:首页探测后整份文件直接跳过文本层 - FileParser.is_pdf_page_scanned 带缓存的逐页扫描判定 Refs #5 * fix(ner): HaS 实体 confidence=None 时语义共指传播 float(None) 崩溃 Entity schema 中 confidence 是 float|None(HaS 实体按设计不带分数), 但 _propagate_confirmed_semantic_mentions 里 getattr(e, "confidence", 0.9) 只在属性缺失时取默认值,属性为 None 时 float(None) 抛 TypeError, 整个文本链路请求 500。云实例实测 traceback 命中此处。 改为 getattr(...) or 0.9 回退。与 #5 的扫描件修复无关,同分支顺手修。 * docs: issue #10 端到端处理性能瓶颈分析与调优方向 * refactor(review): 按 code review 修复 Important/Minor 项 - has_fragmented_text_layer 转公开方法(vision_service 不再调 FileParser 私有成员) - confidence=0.0 不再被 or 回退成 0.9(海象运算符精确判 None),补 0.0 回归测试 - SCAN_TEXT_LAYER_MIN_MEDIAN_LINE_LEN 更名为 AVG(代码算的是均值) - 常量注释写明整页背景图文本 PDF 会误判走图像 OCR 的取舍依据 - 测试先清稀疏探测缓存,避免用例间污染 不接受 reviewer '文本稀疏才判扫描页' 的佐证建议:执行异议书样例 文本层行长正常(avg 27、断行率 0.05),加该条件会回归 Issue #5; 且误报代价(图像 OCR 仍正确)与漏判代价(漏脱敏)不对称。 --------- Co-authored-by: youayou <youayou-Lee@users.noreply.github.com>
* feat(redaction): 化名(pseudonym)替换模式——词池 + 实体映射 + 类型感知虚构生成 - ReplacementMode.PSEUDONYM:识别实体替换为同类型虚构词(张三/某公司…), RedactionContext 复用 coref 机制保证同实体全文一致 - 词池服务 word_pool_service:按租户 JSON 存储(同 preset 模式), 内置默认词池 config/default_word_pools.json,类型别名归并 (JUDGE/LAWYER→PERSON 等),精确映射 custom_map 支持跨文档同套化名 - 耗尽策略:numbered(张三1)/ cycle / generated;格式类实体 (身份证校验位/手机号段/银行卡 Luhn/邮箱/车牌)按规则生成合法虚构号 - API /api/v1/word-pools:查/改/删/导入导出(merge 级联 custom_map) - orchestrator 按文件 owner 注入租户词池,preview-map 沿用 Refs #7(总述 #6) * fix(redaction): 词池注入与 PDF 回写两处缺陷(云实例 e2e 发现) - redactor.redact 创建 RedactionContext 时未传 config.word_pools, 租户词池(含 custom_map 精确映射)被懒加载的默认词池顶掉 - 文本 PDF 回写默认 helv 字体无 CJK 字形,中文替换词写成 ???, 含非 ASCII 时改用内置 china-s - insert_textbox 放不下(rc<0)时整体不写入,数字串(身份证虚构号) 曾静默丢失;逐级降字号重试到 4pt - 回归测试:CJK 渲染提取 + 降级重试落盘 Refs #7 #8 * refactor(review): 按 code review 修复 Important 两项 + Minor 清理 - 化名模式同原文混排(无 coref 正则 + 有 coref 模型)复用既有替换词, 保证全文一致(review Critical 一致性缺口,补测试) - preview-map 从认证上下文取 owner,不再硬编码 local_user(租户覆盖下 预览与执行结果分叉) - custom_map/显式替换用掉的词登记占用,词池不再重复分配;numbered 组合跳过已占用 - 调用方传入的 word_pools 走 _normalize_pool 归一化 - 回写 4pt 仍放不下时打 warning(原为静默丢弃) - word-pools 路由 literal 路径前置于参数路由;删未用 import --------- Co-authored-by: youayou <youayou-Lee@users.noreply.github.com>
* feat(export): 文档导出契约——修订历史替换 + 残留自检(Refs #8) - Word 追踪修订:w:delText(已删除内容仍留在修订历史)纳入替换, pass1 对每段落补 delText 专项处理 - 修复双重替换:_replace_in_docx_xml_parts 原本重复处理正文/页眉/页脚 (pass1 已覆盖),当替换词恰为另一实体原文时第二趟会改写刚写入的 替换词,导致成品与 entity_map 不一致;pass2 收窄到批注/脚注/尾注 - 导出后自检:redact() 对文本型 PDF/docx/txt 提取成品全文,校验被替换 实体原文零残留,残留清单进 RedactionResult.residual_entities 并告警 (PDF 图像遮挡不在本契约内) - CID 子集缺字:替换词统一用内置 china-s 整字体嵌入,不依赖原文档字体 子集(评估结论见 issue 评论) * fix(review): 按 code review 修复导出契约 Critical/Important 项 - C1 恢复 XML 全量趟对正文/页眉页脚部件的覆盖(文本框/嵌套表格/SDT/ 首页奇偶页眉此前因 pass2 收窄漏脱敏),用 pass1 已处理段落元素集合 跳过防双重替换;存元素引用而非 id()(lxml 代理无引用会被回收, 同节点再遍历分配新代理导致跳过失效,实测复现) - I1 docx 自检改为读包内全部 word/*.xml 文本节点(含批注/脚注/文本框/ w:delText),自检覆盖面不弱于改写器 - I2 .doc 转换产物纳入自检 - M1 提取失败/空文本按 check inconclusive 记 error,不再伪装通过 - M2 短 ASCII 实体词边界匹配降噪 - M4 补文本框+嵌套表格回归测试,删装饰性断言 --------- Co-authored-by: youayou <youayou-Lee@users.noreply.github.com>
* feat(frontend): 化名替换模式入口 + 替换词池配置页 (#9) - ReplacementMode 联合类型与枚举新增 pseudonym,batch/playground 全链路打通 - 批量向导 step1 文本打码方式新增「化名替换」,选中时显示词池配置入口链接 - 单次处理(Playground)模式选择器新增化名替换选项(4 栅格布局) - 新增 /settings/word-pools 词池管理页:按实体类型编辑词池/耗尽策略/精确映射, 支持保存、恢复默认、JSON 导入导出(合并/整体替换) - 新增 wordPoolsApi 服务与 wordPools query key,中英文 i18n 文案 * style: prettier 格式化 --------- Co-authored-by: youayou <youayou-Lee@users.noreply.github.com>
独立 reviewer 对 PR #16 的跟进修复: - fetchBatchPreviewMap 模式映射补 pseudonym 分支(此前静默回落 STRUCTURED, 复核预览与任务实际输出不一致) - 词池导入前端校验:拒绝数组/非法形状,逐池校验 words 为数组, count=0 时不再提示成功 - 删除未使用的 queryKeys.wordPools 死代码 Co-authored-by: youayou <youayou-Lee@users.noreply.github.com>
* fix(audit): 独立对抗性审计发现的缺陷修复 独立 AI 审计(不含作者声明、对抗性验证)发现的缺陷: - Critical:docx 超链接(w:hyperlink)/修订插入(w:ins)/smartTag 内的 w:t 不进 python-docx runs,pass2 又因整段标记已处理而跳过 → 原文直接漏出。 pass1 的段落级 XML 子查询扩为覆盖这些节点 + w:delText + w:instrText(域代码) - Important:orchestrator 构造 RedactionResult 时丢弃 residual_entities, API 恒返回空(自检结果对调用方不可见);批量导出 build_redaction_config 未注入租户词池(跨流程化名不一致);自检只查原文残留不查替换词落盘 - Minor:词池导入裸字典格式被拒;words 传字符串被逐字拆分成单字词 审计确认无误的区域:格式生成器(ISO 7064/Luhn 独立复算)、租户隔离与 路径穿越、并发导入无丢失更新、PDF 插入重试无重复、鉴权覆盖。 Refs #7 #8 * fix(audit-r2): 独立复审发现的跨界实体泄漏(Critical)与自检盲区 - 实体横跨「直接 run ↔ 超链接/修订插入/smartTag」边界时,run 级与嵌套级 替换各自拼接文本都不含完整原文,两趟都 miss → 原文直接漏出。 改为按出现位置分流:完全在直接 run 区域的键走 run 级(保格式), 含嵌套节点字符或跨界的键走整段 XML 统一字符映射,键集互斥 (避免 run 级写入的替换词被第二趟当原文二次改写) - 自检 leak 分支同样去空白归一化(跨节点提取插空白导致漏检 + 假干净) - 默认 XML 查询补 w:instrText;补跨界实体复现测试 * fix(audit-r3): 混合段落跨键串词与自检归一化误报 - 同段落 run 键与 union 键并存时整体走单一 XML 趟:run 趟先写入的 替换值若与 union 键原文相同(词池回灌),union 趟会在改后文本上 把它再改写一次,产出错误化名;单趟非重叠匹配无此问题(保格式仅 对罕见的混合段落让步) - 自检归一化子串分支:替换词包含原文(John→Johnson)时跳过, 消除误报 - 补混合段落跨键复现测试(先红后绿) --------- Co-authored-by: youayou <youayou-Lee@users.noreply.github.com>
- 生产组合定案: BW1000+DTK25.04.2镜像 + CC9.2(64G)卡, vLLM NER 0.53s + GPU OCR 1.2s/页 - paddle-dcu 7版本×DTK25.04.1 全崩 MIOpen bad_alloc(与卡无关); 25.04.2 全活 - Dockerfile.dtk-paddle-vllm: 自建镜像路径(含 10.16.4.1:8000 dtk25042 wheel 直链) - 脚本入库(凭据脱敏→SCNET_PROXY_URL): OCR GPU/vLLM/paddle判别器/wheel猎测/真实案卷E2E/泄漏审计 - 已知问题: 扫描件残留泄漏(真实案卷OCR审计实证)/加密卷404/entities契约 Co-Authored-By: Claude <noreply@anthropic.com>
…st-info 溯源) Co-Authored-By: Claude <noreply@anthropic.com>
- cloud-deploy/venv/: 4个venv的pip freeze快照(nl/app/paddle-25041/paddle-cpu) - cloud-deploy/build_venvs.sh: 从零重建(过滤系统栈泄漏10.16.4.1直链/paddle依赖顺序/UTC垫片内置) - cloud-deploy/verify_dcu_adaptation.sh: L0-L3四层验收门, scnet-bw实测22/22全绿 - 总览新增§8: 镜像获取四条路(A社区/B公共镜像指引/C Dockerfile/D降级) + 保存前清理红线 + venv三种交付方式 Co-Authored-By: Claude <noreply@anthropic.com>
- §5.1 七份真实卷宗逐案表(含加密卷FAIL) + vision逐页API说明(page=1默认,整卷成本估算) - §5.2 分阶段: LA 7-10s大头 / OCR GPU 2.5-3s / NER transformers 1.4-4.3s×2 / 合计10.4-22.6s每页 - §5.3 NER运行时对照: vLLM 0.49-0.54s vs transformers 1.4-4.3s(同口径实测), llama-server待测 - §9.1 泄漏结论修正: p2+残留=未处理(单页API+harness只调p1)非漏检; 整卷流程覆盖率待验证 Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
在 SCNet(曙光云)海光 DCU 环境上完成本项目全栈适配与验证,提交适配文档与工具链。
核心结论(全部实例实测背书)
内容
docs/dcu/海光DCU适配总览.md:SCNet 实例要点 / 镜像矩阵×4 / 卡型矩阵 / DTK×paddle 兼容 / 速度实测(真实案卷逐案明细、单页管道分阶段、NER 运行时对照)/ 15 条坑清单 / 镜像与 venv 交付指南cloud-deploy/:GPU OCR / vLLM / paddle 判别器 / L0-L3 验收门(22/22 全绿)/ venv 依赖快照与从零重建脚本 / 真实案卷 E2E 与成品泄漏审计工具 / Dockerfile(DTK25.04.2 wheel 直链)验证
🤖 Generated with Claude Code