技術 約4分で読めます

NDLOCR Docker イメージビルドの成功手順まとめ

某所の仕事で「これ動くの?」と言われて、「イメージビルドして動かすだけでしょ?」と思ったら全然動かなくて、危うくWindows投げ捨てるところだった。

そんな悲しい事態が再び起きるとアレなんで、うちの環境での正解ルートをメモっておこうと思う。

⚠️ 前提条件

  • Docker Desktop がインストール済みであること
  • Docker Desktop を管理者権限で起動しておくこと(じゃないと上手く動かなかった)

💻 動作環境

項目内容
エディションWindows 11 Home
プロセッサ13th Gen Intel Core i7-13700H (2.40 GHz)
実装 RAM32.0 GB
システムの種類64 ビット オペレーティング システム、x64 ベース プロセッサ
GPUNVIDIA GeForce RTX 4060 Laptop
NVIDIA ドライバ576.02
CUDA12.9

【NDLOCR環境構築 成功手順まとめ】

1. 使用するリポジトリの選定

公式(ndl-lab)ではなく、有志による修正版(syoyo版)を使用する。

  • リポジトリURL: https://github.com/syoyo/ndlocr_cli.git
  • 理由: このとき公式のコミット b844abfがDockerの環境更新を行っていて、制作者は動いたようだけどこっちは全く動かなくてハマった。syoyo版はライブラリ等が調整されている。

2. コードの取得(クローン)

サブモジュールは使われておらず、コードが内包(ベンダリング)されているため、通常の手順でOK。

  • コマンド:
    git clone https://github.com/syoyo/ndlocr_cli.git
    cd ndlocr_cli
  • ポイント: src フォルダに全コードが入っているため、--recursive オプションは不要。

3. 【最重要】Dockerfileの修正

Python 3.8のサポート終了に伴う get-pip.py のエラーを回避するため、docker/Dockerfile を1箇所修正する。

  • 修正ファイル: docker/Dockerfile
  • 修正箇所: 26行目付近
  • 修正内容:
    • NG: wget https://bootstrap.pypa.io/get-pip.py
    • OK: wget https://bootstrap.pypa.io/pip/3.8/get-pip.py
    • ※URLに /pip/3.8 を追加して、Python 3.8専用のスクリプトを指定する。

4. ビルドの実行

修正後、以下のコマンドでイメージを作成する。

  • コマンド:
    docker build -t ocr-cli-py37:latest -f docker/Dockerfile .
    (※イメージ名はログに合わせて ocr-cli-py37 としてるだけで、好きな名前でOK)

🔍 この手順に至った経緯(ハマりポイントの解消)

  1. 「サブモジュールがない」問題:
    • 実は syoyo 版は src フォルダにコードをコピーして持っていたため、サブモジュール操作は不要だった。
  2. 「公式のDockerfileが動かない」問題:
    • 公式は最新環境(CUDA 12など)へ移行しようとして不安定だったため、安定版である syoyo 版を採用した。
  3. 「get-pip.pyエラー」問題:
    • Python 3.8環境で最新の get-pip.py が動かなくなっていたため、URLを書き換えて対応した。
  4. 「ビルドがとにかく長い」問題:
    • ビルドはかなり時間がかかる。途中で止めずに気長に待つこと。

これらをクリアしたことで、無事にビルドが完了しました。


📄 修正済みDockerfile

コピペ用に修正済みのDockerfile全文を載せておく。

FROM nvcr.io/nvidia/cuda:11.1.1-cudnn8-devel-ubuntu20.04

ENV PROJECT_DIR=/root/ocr_cli
ENV FORCE_CUDA="1"
ENV TORCH_CUDA_ARCH_LIST="7.5+PTX"
ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all"
ENV DEBIAN_FRONTEND=noninteractive

RUN set -x \
    && apt update \
    && apt upgrade -y

RUN set -x \
    && apt update \
    && apt -y install locales \
    && locale-gen ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL=ja_JP.UTF-8
RUN localedef -f UTF-8 -i ja_JP ja_JP.utf8

RUN set -x && apt -y install libgl1-mesa-dev libglib2.0-0 git
RUN set -x \
    && apt -y install python3.8 python3.8-dev \
    && ln -s /usr/bin/python3.8 /usr/bin/python \
    && apt -y install wget python3-distutils && wget https://bootstrap.pypa.io/pip/3.8/get-pip.py && python get-pip.py

COPY . ${PROJECT_DIR}

RUN set -x \
    && pip install -r ${PROJECT_DIR}/requirements.txt
RUN set -x && pip install torch==1.8.1+cu111 torchvision==0.9.1+cu111 -f https://download.pytorch.org/whl/lts/1.8/torch_lts.html
RUN set -x && cd ${PROJECT_DIR}/src/ndl_layout/mmdetection && python setup.py bdist_wheel && pip install dist/*.whl
ENV PYTHONPATH $PYTHONPATH:${PROJECT_DIR}/src/text_recognition/deep-text-recognition-benchmark
RUN set -x && pip install mmcv-full==1.4.0 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.8.0/index.html

WORKDIR ${PROJECT_DIR}