02 / 05 · 2020.08 — 2022.08
人民中科智能技術有限公司
コンテンツ安全の中台でアルゴリズム調整とクロス言語ラッパーを担当。Ray で 10 種類以上のアルゴリズム機能を編成し、SWIG で C++ SDK を Python に接続。昇腾 Atlas 推論 SDK にも参画し、オフライン配備可能なクロスモーダル検索製品を単独で納品した。
- 職種
- アルゴリズム応用エンジニア
- 業種
- AI × コンテンツ安全
- 所在地
- 北京
- チーム
- 15名
- 在籍
- 2年1ヶ月
主な成果
10 種類以上
統合して編成したアルゴリズム機能:アダルト、暴力テロ、OCR、局ロゴ、ロゴ、顔検索、動画コピー検出、クロスモーダル検索 など
1 枚で ×5
num_gpus=0.2 の小数指定で、1 枚の GPU が 5 つのモデルインスタンスを並行処理(1 台・Tesla T4 × 4)
3 件
納品した顧客向けカスタマイズのオフライン版(Docker イメージ)
この会社での案件
PROJECTS · 32020.08 – 2022.08(2年) · 中台・アルゴリズムバックエンド(Python / C++11) · 体制 15名
AI コンテンツ安全アルゴリズム中台
大手のコンテンツ安全審査製品を目標とした AI システムで、公開ネット上のメディアを監視・解析し、政府系ユーザーや協業各社に審査機能を提供する。サブスクリプション方式で 10 種類以上のアルゴリズム機能(画像・動画・音声・テキスト)を提供。自分は Ray ベースの調整中台と SWIG による言語間ラッパーを担当し、昇腾 Atlas ACL 推論 SDK とデュアルプラットフォームのモデルツールチェーンにも参画した。
- Ray ベースの分散アルゴリズム調整中台を構築(主担当):Actor モデルで 10 種類以上のアルゴリズム機能(アダルト・暴力テロ識別、OCR、局ロゴ、ロゴ、顔検索、動画コピー検出、クロスモーダル検索など)を統合的に編成
- メッセージ信頼性:Kafka の自動コミットを無効化し、1 バッチ処理後に commit(at-least-once)。puller Actor の数はクライアントが検出したパーティション数に合わせ、1:1 で起動
- GPU リソースの分割:num_gpus=0.2 の小数指定により、1 枚の GPU で 5 つのモデルインスタンスを並行稼働(クラスタは 1 台・Tesla T4 × 4)
- 「電文層 — ルーティング層 — モデル層」の 3 層抽象を設計:電文層は ray.wait で推論バッチを流れるように再構成し、ルーティング層は購読 algo_id とモデル能力の積集合で動的に振り分け。新しいモデルは Actor を 1 つ足すだけで既存コードに触れない
- SWIG 4.0 で C++ アルゴリズムライブラリを Python 拡張モジュール化(主担当):画像は numpy のメモリポインタで渡し C_CONTIGUOUS を検証して、言語間のデータコピーを排除
- 華為 Ascend Atlas ACL 推論 SDK(C++11 / CMake)の開発に参画:デバイス/Stream 管理、FFmpeg のデマルチプレクスと DVPP ハードウェアデコード。ベクトル検索を AscendFaiss から Milvus へ移行し、CANN ドライバ 3 バージョンに対応。複数チップ並列検索時の OpenMP スレッド数不一致によるインデックス削除失敗を特定・修正
- モデルのデュアルプラットフォーム展開:PyTorch → ONNX(opset 11)→ TensorRT 7 INT8(Tesla T4 向け)/Ascend ATC の .om オフラインモデル。同一の業務コードで NVIDIA と Ascend の両方を支え、累計 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 · 単独開発
クロスモーダル検索オフライン製品(顧客向けカスタマイズ)
顧客のカスタマイズ要件に応えるオフライン納品物。開発者向けの多パラメータなモデル API を単純な検索 API にラップし、Docker イメージで納品。モデルパス・特徴次元・インデックス分割などの内部パラメータはすべて隠し、検索 API を 1 つだけ公開する。
- Tornado サービスがテキスト/画像/動画の 3 モダリティ入力に対応:動画は 25 フレームごとに 1 枚抽出し、クロスモーダルのデュアルタワーモデルで 512 次元の特徴に統一、動画特徴はフレーム平均
- gRPC で Milvus を検索して TopK 候補を取得し、複数条件ロジックエンジン(AND/OR/NOT/包含)で集合演算、RRF(逆順位融合)で再ランク、ラベル一括付与、Redis で 2 次キャッシュ
- 性能改善 4 段階:gRPC 単発照会 → 並行バッチ API → 論理条件の前置絞り込み → マルチスレッド分割照会(100 件/バッチ)+ np.dot によるバッチ行列内積。ベース照会を N 回の逐次 gRPC から ⌈N/100⌉ 回の並行バッチへ集約
- 同種のオフライン製品として、動画の特定物体フィルタも担当:フレーム抽出 → SDK で 512 次元特徴 → gRPC で Milvus 検索 → 後処理 → Docker 納品
- Python
- Tornado
- gRPC
- Milvus
- Redis
- NumPy
- OpenCV
- Docker
システム構成
2020.08 – 2022.08 · SE · 体制 1名
CV データ処理システム
ディープラーニングに必要なデータ処理業務を可視化・効率化することを目的とし、部門メンバーが GUI 操作でデータ収集・加工を行えるように開発。バラバラに存在していた個人スクリプトをシステム化・統合し、再利用性と作業効率を向上させた。
- データ収集モジュール:RESTful API でクローラサービスを連携し、画面から収集タスクを実行、結果を MongoDB に保存
- データ処理モジュール:OpenCV の画像処理・FFmpeg の動画処理を Tornado で API 化し、Vue 画面から操作可能に。ファイルの分割アップロード(レジューム対応)を設計
- モデル欠陥分析モジュール:初期ラベリングと人手確認を GUI 化。複数データセット・モデルを入力して 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 ハードウェアデコード。工学的なトレードオフも学びました。3 層の抽象により、プロトコル変更・アルゴリズム更新・モデル追加が互いに影響しないこと。Kafka の手動コミットで at-least-once を得ること。最適化は勘ではなく実測指標で進めること。
TECH STACK
- Python
- C++11
- Ray
- Kafka
- Protobuf
- gRPC
- SWIG
- Milvus
- PyTorch
- ONNX
- TensorRT
- 昇腾 ACL
- Tornado
- Redis
- MySQL
- MongoDB
- Docker