1
/
5

【Qiita】AIをデーモン化しようとした戦いの記録

Photo by Florian Olivo on Unsplash

(Qiitaに公開しているメンバーの投稿です)

はじめに

はじめまして、村上です。
昨年の4月にプログラミング完全素人の身空で入社し、現在はAIを使った製品を開発しています。

その中で、直近ぶつかった壁とその解決方法を書きました。
「そんなん当たり前やろ!」みたいなこともちょいちょい出てきます。

やりたかったこと

詳しい内容は省きますが、このプロジェクトにおけるAIのタスクは物体検出です。

送られてきた画像に対して処理を行うのですが、画像がいつやってくるかは分かりません。

そこで推論プログラムには、常に画像の有無をチェックし続けて、画像を見つけ次第推論をしてもらうのが適切だろうという結論に至りました。
「常に監視し続ける」ためには、プロセスをデーモン化する必要があったわけです。

環境

  • EC2(Ubuntu 18.04.5 LTS)
  • anaconda(コイツさえいなければもっと楽にできた気がしている)
  • detectron2(正直今回は関係ないです)

デーモン化に使ったのはsystemdです。(いつかpython-daemonも使ってみたいですね。with句だけでデーモンプロセス指定できるとか素敵すぎる)

手順

を叩けば分かるはずです。まず、pythonコードにshebangを記述します。
最近のPythonはshebang無しでも実行できますが、デーモン化する場合はこれがないとsystemdがインタプリタを見失ってしまいます。かわいいね
shebangに書くべきインタプリタは、該当の環境をactivateした状態でwhich python3

なお、ここで改行コードをLFにしておかないと後々エラーが出ます。気をつけよう!(1敗)

次に、Pythonコードに権限を与えてあげましょう。
個人的に権限を数字で示すこの記法は苦手です(へなちょこ)。

$ sudo chmod 0755 /home/ubuntu/hoge/hoge_detection.py

それから、/etc/systemd/system/hoge.service を作成します。ここが一番大事!
下記の設定だと色々と問題が出ます。ソレについては後述

[Unit]
Description = hoge daemonize test

[Service]
WorkingDirectory = /home/ubuntu/hoge
ExecStart = "/home/ubuntu/anaconda3/envs/hoge_env/bin/python3 /home/ubuntu/hoge/hoge_detection.py" #問題2
Restart = always #問題1
Type = simple

[Install]
WantedBy = multi-user.target

そして、あとは以下のコマンドで有効化しておしまいのはずでした。

$ sudo systemctl enable hoge
$ sudo systemctl start hoge

・・・続きはQiitaで!

株式会社プロトソリューション's job postings
12 Likes
12 Likes

AI

Weekly ranking

Show other rankings
If this story triggered your interest, go ahead and visit them to learn more