02 / 05 · 2020.08 — 2022.08
People's Zhongke Intelligent Technology Co., Ltd.
Owned algorithm scheduling and the cross-language layer of a content-safety platform: Ray to orchestrate 10+ capabilities, SWIG to bring C++ SDKs into Python, a share of the Ascend Atlas inference SDK, and a cross-modal retrieval product shipped offline on my own.
- Role
- Algorithm Application Engineer
- Industry
- AI × content safety
- Location
- Beijing
- Team
- 15 people
- Tenure
- 2 yrs 1 mo
Key results
10+
Capabilities orchestrated together: adult content, violence/terror, OCR, TV logo, logo, face search, video copy detection, cross-modal search and more
5 per card
Fractional GPUs (num_gpus=0.2) let one card serve 5 model instances (single node, 4× Tesla T4)
3
Customer-specific offline editions delivered (Docker images)
Projects here
PROJECTS · 32020.08 – 2022.08(2 yrs) · Platform / algorithm backend (Python / C++11) · Team 15
AI content-safety algorithm platform
An AI system modelled on leading content-moderation products: it monitors and analyses public media and offers review capabilities to government users and partners. It exposes 10+ algorithm capabilities by subscription across images, video, audio and text. I owned the Ray scheduling platform and the SWIG cross-language layer, and contributed to the Ascend Atlas ACL inference SDK and the dual-platform model toolchain.
- Built the Ray-based distributed algorithm scheduling platform (owner): orchestrated 10+ capabilities as actors — adult-content and violent/terror detection, OCR, TV-logo and logo detection, face search, video copy detection, cross-modal search
- Message reliability: Kafka auto-commit off, commit after each processed batch (at-least-once); puller actors start 1:1 with the partitions the client discovers
- GPU slicing: fractional resources with num_gpus=0.2 let one card host 5 model instances in parallel (single node, 4× Tesla T4)
- Designed a three-layer abstraction — message, routing, model: the message layer re-batches inference input as downloads finish with ray.wait; the routing layer intersects the subscribed algo_id set with each model's capabilities; adding a model means adding one actor and touching nothing else
- Wrapped C++ algorithm libraries as Python extension modules with SWIG 4.0 (owner): images are passed as numpy memory pointers after a C_CONTIGUOUS check, removing cross-language copies
- Contributed to the Huawei Ascend Atlas ACL inference SDK (C++11 / CMake): device and stream management, FFmpeg demuxing with DVPP hardware decoding; migrated vector search from AscendFaiss to Milvus; adapted to three CANN driver releases; found and fixed index-deletion failures in multi-chip search caused by an OpenMP thread-count mismatch
- Dual-platform model delivery: PyTorch → ONNX (opset 11) → TensorRT 7 INT8 (for Tesla T4) and Ascend ATC .om models, so one business codebase runs on both NVIDIA and Ascend; 17 model packages maintained
- In-house OCR pipeline for sensitive content: PSENet detection + CRNN (LSTM) recognition + angle classification, with results matched against a ~20,000-word dictionary using a DFA algorithm
- Python
- C++11
- Ray
- Kafka
- Protobuf
- gRPC
- SWIG
- CMake
- PyTorch
- ONNX
- TensorRT
- 昇腾 ACL
- Milvus
- Redis
- MySQL
- MongoDB
- Docker
- FFmpeg
System architecture
2020.08 – 2022.08 · Sole developer
Cross-modal retrieval offline product (customer-specific)
An offline deliverable for customer-specific needs: the developer-facing, many-parameter model API is wrapped into one simple retrieval endpoint and shipped as a Docker image, hiding model paths, feature dimensions and index partitions.
- Tornado service accepting text, image and video: video is sampled every 25th frame, encoded by a cross-modal two-tower model into 512-dim features, with frame features averaged
- gRPC lookups against Milvus return TopK candidates, a multi-condition logic engine (AND / OR / NOT / contains) does set operations, RRF reciprocal-rank fusion re-ranks, tags are attached in batch, and Redis serves as a second-level cache
- Four performance iterations: single gRPC queries → concurrent batch API → logic filtering first → multi-threaded sharded queries (100 per batch) with np.dot batch matrix products; gallery lookups went from N serial gRPC calls to ⌈N/100⌉ concurrent batches
- A sibling offline product handles video object filtering: frame extraction → SDK 512-dim features → gRPC search in Milvus → post-processing → Docker delivery
- Python
- Tornado
- gRPC
- Milvus
- Redis
- NumPy
- OpenCV
- Docker
System architecture
2020.08 – 2022.08 · Systems Engineer · Team 1
CV Data-Processing System
Built to visualize and streamline the data-processing work that deep learning needs, letting team members collect and transform data through a GUI. Scattered personal scripts were consolidated into one system, improving reuse and efficiency.
- Data-collection module: integrated crawler services over RESTful APIs, ran collection tasks from the UI, stored results in MongoDB
- Data-processing module: exposed OpenCV image ops and FFmpeg video ops as Tornado APIs, operable from a Vue UI; designed resumable chunked uploads
- Model-defect analysis module: GUI for initial labeling and human review; computed PR metrics across datasets/models and auto-generated PDF reports
- Worked across frontend and backend, including page fixes and UI improvements
- Python
- Tornado
- Vue
- Vue-Element-Admin
- MongoDB
- OpenCV
- FFmpeg
System architecture
System data flow
Abstract sketch · no internal detailsKafka tasks
From upstream microservices · Protobuf
Ray scheduling platform
Message · routing · model layers
▲ My part
SWIG layer
C++ SDK → Python extension
▲ My part
C++ inference SDK
CUDA / TensorRT · Ascend ACL
Milvus / MySQL
Features · gallery
Result Kafka
Written back per protocol
Team & daily life
Photos are shared with colleagues' consent, or other people's faces are blurred
What I learned here
In the AI × content-safety industry I saw far more applications of deep learning. On the vision side that meant OCR and NLP; my main line of work was the algorithm program, using Kafka to tie platforms together, with exposure to Docker deployment and cloud-server operations.
I came to understand how to use compute efficiently — model distillation and pruning, hardware-level acceleration through CUDA / TensorRT, DVPP hardware decoding on Ascend — and a few engineering trade-offs: a three-layer abstraction so protocol changes, algorithm upgrades and new models do not entangle; manual Kafka commits for at-least-once delivery; and optimisation driven by measurements, not feel.
TECH STACK
- Python
- C++11
- Ray
- Kafka
- Protobuf
- gRPC
- SWIG
- Milvus
- PyTorch
- ONNX
- TensorRT
- 昇腾 ACL
- Tornado
- Redis
- MySQL
- MongoDB
- Docker