02 / 05 · 2020.08 — 2022.08
人民中科智能技术有限公司
在内容安全中台负责算法调度与跨语言封装:用 Ray 编排 10+ 类算法能力,用 SWIG 把 C++ SDK 接入 Python,参与昇腾 Atlas 推理 SDK,并独立交付可离线部署的跨模态检索产品。
- 职位
- 算法应用工程师
- 行业
- AI + 内容安全
- 地点
- 北京
- 团队
- 15 人
- 在职
- 2 年 1 个月
关键成果
10+ 类
统一编排的算法能力:成人内容、暴恐、OCR、台标、Logo、人脸检索、视频拷贝检测、跨模态检索等
单卡 ×5
以 num_gpus=0.2 小数资源声明,单卡并行承载 5 个模型实例(单机 4 卡 Tesla T4)
3 个
交付的客户定制离线版本(Docker 镜像)
在这里做的项目
PROJECTS · 32020.08 – 2022.08(2 年) · 中台・算法后端(Python / C++11) · 团队 15人
AI 内容安全算法中台
对标大厂内容安全审核产品的 AI 系统,监控并解析公网媒体内容,为 G 端用户及友商提供审核能力。以订阅方式对外提供 10+ 类算法能力,覆盖图片、视频、音频、文本四种媒体类型。我负责其中的 Ray 调度中台与 SWIG 跨语言封装层,并参与昇腾 Atlas ACL 推理 SDK 与双平台模型工具链。
- 基于 Ray 构建分布式算法调度中台(主线负责):以 Actor 模型统一编排 10+ 类算法能力(成人内容识别、暴恐识别、OCR、台标、Logo、人脸检索、视频拷贝检测、跨模态检索等)
- 消息可靠性:关闭 Kafka 自动提交,一批处理完再 commit(至少一次语义);puller Actor 数量由客户端动态探测分区数决定,与分区 1:1 对等启动
- GPU 资源分片:以 num_gpus=0.2 小数资源声明,单卡并行承载 5 个模型实例(集群为单机 4 卡 Tesla T4)
- 设计“报文层 — 路由层 — 模型层”三级抽象:报文层用 ray.wait 流式重组推理 batch,路由层按订阅的 algo_id 与模型能力集求交集动态分发;新增一类模型只需新增一个 Actor,不改动既有代码
- 用 SWIG 4.0 把 C++ 算法库封装为 Python 扩展模块(主线负责):图像以 numpy 内存指针传入并校验 C_CONTIGUOUS,消除跨语言数据拷贝
- 参与华为昇腾 Atlas ACL 推理 SDK(C++11 / CMake):设备与 Stream 管理,FFmpeg 解封装配合 DVPP 硬件解码;将向量检索由 AscendFaiss 迁移至 Milvus;适配 3 个 CANN 驱动大版本,并定位修复多芯片并行检索时 OpenMP 线程数不匹配导致的索引删除失败
- 模型双平台落地:PyTorch → ONNX(opset 11)→ TensorRT 7 INT8(面向 Tesla T4)与昇腾 ATC .om 离线模型,同一业务代码支持 NVIDIA 与昇腾两套算力,累计维护 17 个模型包
- 自研 OCR 敏感内容识别链路:PSENet 文本检测 + CRNN(LSTM) 识别 + 角度分类,识别结果经 DFA 算法与约 2 万条词库高效匹配
- Python
- C++11
- Ray
- Kafka
- Protobuf
- gRPC
- SWIG
- CMake
- PyTorch
- ONNX
- TensorRT
- 昇腾 ACL
- Milvus
- Redis
- MySQL
- MongoDB
- Docker
- FFmpeg
系统架构
2020.08 – 2022.08 · 独立开发
跨模态检索离线产品(客户定制)
面向客户定制化需求的离线交付物:把面向开发者的多参数模型接口封装成一个简易检索接口,以 Docker 镜像交付;对外只暴露一个检索接口,屏蔽模型路径、特征维度、索引分区等全部内部参数。
- Tornado 服务支持文本 / 图片 / 视频三模态输入:视频抽帧(每 25 帧取 1 帧),经跨模态双塔模型统一编码为 512 维特征,视频特征取帧均值
- 经 gRPC 检索 Milvus 取 TopK 候选,用多条件逻辑引擎(与 / 或 / 非 / 包含)做集合运算,RRF 倒数排名融合重排,批量打标签,Redis 做二级缓存
- 四轮性能迭代:gRPC 单条查询 → 并发批量接口 → 逻辑前置筛选 → 多线程分片查询(100 条 / 批)+ np.dot 批量矩阵点积;底库查询由 N 次串行 gRPC 收敛为 ⌈N/100⌉ 次并发批量查询
- 同类离线产品另有视频特定物体过滤:抽帧 → SDK 提取 512 维特征 → gRPC 检索 Milvus → 后处理 → Docker 交付
- Python
- Tornado
- gRPC
- Milvus
- Redis
- NumPy
- OpenCV
- Docker
系统架构
2020.08 – 2022.08 · 系统工程师 · 团队 1人
CV 数据处理系统
旨在将深度学习所需的数据处理工作可视化、简化,让部门成员通过 GUI 完成数据采集与加工。把分散的个人脚本系统化、集成化,提升复用性与效率。
- 数据采集模块:以 RESTful API 接入爬虫服务,从界面下发采集任务,结果存入 MongoDB
- 数据处理模块:将 OpenCV 图像处理、FFmpeg 视频处理封装为 Tornado 接口,通过 Vue 界面操作;设计分片断点续传上传
- 模型缺陷分析模块:将初打标与人工确认界面化;输入多数据集/模型计算 PR 指标并自动生成 PDF 报告
- 前后端均参与,包含页面代码修正与 UI 改善
- Python
- Tornado
- Vue
- Vue-Element-Admin
- MongoDB
- OpenCV
- FFmpeg
系统架构
系统数据流
抽象示意 · 不含内部细节Kafka 任务
上层微服务投递 · Protobuf
Ray 调度中台
报文层 · 路由层 · 模型层
▲ 我负责的部分
SWIG 封装层
C++ SDK → Python 扩展
▲ 我负责的部分
C++ 推理 SDK
CUDA / TensorRT · 昇腾 ACL
Milvus / MySQL
特征 · 底库
结果 Kafka
按协议回写
团队与日常
照片均已征得同事同意,或对他人面部做了模糊处理
在这里学到了什么
在 AI + 内容安全行业,了解了更多深度学习的应用。计算机视觉方向涉及 OCR、NLP;主线工作是算法程序,用 Kafka 融合多平台业务,并接触了 Docker 部署和云服务器运维。
更深入理解了如何高效利用算力:模型蒸馏与剪枝、通过 CUDA / TensorRT 在硬件层加速,以及昇腾上用 DVPP 硬件解码。也体会到几个工程上的取舍:三层抽象让协议变更、算法升级和新增模型互不牵连;Kafka 手动提交换来至少一次语义;优化要由实测指标驱动,而不是凭感觉。
TECH STACK
- Python
- C++11
- Ray
- Kafka
- Protobuf
- gRPC
- SWIG
- Milvus
- PyTorch
- ONNX
- TensorRT
- 昇腾 ACL
- Tornado
- Redis
- MySQL
- MongoDB
- Docker