技術
約4分で読めます
NDLOCR Docker イメージビルドの成功手順まとめ
某所の仕事で「これ動くの?」と言われて、「イメージビルドして動かすだけでしょ?」と思ったら全然動かなくて、危うくWindows投げ捨てるところだった。
そんな悲しい事態が再び起きるとアレなんで、うちの環境での正解ルートをメモっておこうと思う。
⚠️ 前提条件
- Docker Desktop がインストール済みであること
- Docker Desktop を管理者権限で起動しておくこと(じゃないと上手く動かなかった)
💻 動作環境
| 項目 | 内容 |
|---|---|
| エディション | Windows 11 Home |
| プロセッサ | 13th Gen Intel Core i7-13700H (2.40 GHz) |
| 実装 RAM | 32.0 GB |
| システムの種類 | 64 ビット オペレーティング システム、x64 ベース プロセッサ |
| GPU | NVIDIA GeForce RTX 4060 Laptop |
| NVIDIA ドライバ | 576.02 |
| CUDA | 12.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専用のスクリプトを指定する。
- NG:
4. ビルドの実行
修正後、以下のコマンドでイメージを作成する。
- コマンド:
(※イメージ名はログに合わせてdocker build -t ocr-cli-py37:latest -f docker/Dockerfile .ocr-cli-py37としてるだけで、好きな名前でOK)
🔍 この手順に至った経緯(ハマりポイントの解消)
- 「サブモジュールがない」問題:
- 実は
syoyo版はsrcフォルダにコードをコピーして持っていたため、サブモジュール操作は不要だった。
- 実は
- 「公式のDockerfileが動かない」問題:
- 公式は最新環境(CUDA 12など)へ移行しようとして不安定だったため、安定版である
syoyo版を採用した。
- 公式は最新環境(CUDA 12など)へ移行しようとして不安定だったため、安定版である
- 「get-pip.pyエラー」問題:
- Python 3.8環境で最新の
get-pip.pyが動かなくなっていたため、URLを書き換えて対応した。
- Python 3.8環境で最新の
- 「ビルドがとにかく長い」問題:
- ビルドはかなり時間がかかる。途中で止めずに気長に待つこと。
これらをクリアしたことで、無事にビルドが完了しました。
📄 修正済み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}