Skip to content
nagadomi edited this page Sep 11, 2016 · 6 revisions

waifu2xサーバー運用ガイド

waifu2xのインストール

README.mdを参照。

Upstartの設定

APIサーバーに使用しているturboは、あまり安定しているとは言えず、たまにエラーで落ちることがあるためupstartで起動状態の管理と落ちた時に再起度するようにしています。

upstartのスクリプトは、appendix/waifu2x.upstart.confにあります。

  1. sudo cp appendix/waifu2x.upstart.conf /etc/init/waifu2x_1
  2. sudo initctl <start|stop|restart> waifu2x_1

このupstartスクリプトは、/home/ubuntu/waifu2x/appendix/run-web.shを呼ぶようになっています。

run-web.sh <GPU Device ID (start from 0)> <TCP Port Number>.

となっています。マルチGPU環境では、upstartを/etc/init/waifu2x_1,/etc/init/waifu2x_2..と複数登録して、各upstart scriptのrun-web.shの引数を変えることで、異なるGPUとポートを使って起動するにしています。 またweb.luaで、-force_cudnnなどのオプションを使いたい場合は、run-web.shの中に追加してください。(web.luaへの引数を全部渡せたほうがいいのかもしれませんが対応できていません)

また、run-web.shはTorch7用の環境変数等を読み込むために、最初の行で.zshrcを読み込んでいます。bashを使っている場合や、サーバー用の環境変数を別のファイルで定義したい場合は、この行を変更してください。

CRON の設定

web.lua./cacheに変換画像やリモートから取得した画像のキャッシュを保存していますが、削除はしていないため、CRON側から削除しています。(web.lua側から削除したほうが楽かなと思っていますが、対応できていません)

  1. crontab -e
  2. */30 * * * * /home/ubuntu/waifu2x/appendix/purge_cache.sh の行を追加

purge_cashe.shは、purge_cache.luaを呼び出して、古いキャッシュ(デフォルトでは4時間より前)を消します。またこのスクリプトも先頭で.zshrcを読み込んでいます。

nginx Settings

waifu2xのAPIサーバーの前にはnginxのゲートウェイを置いています。 理由として、以下のことがあります。

  1. APIサーバーが画像の変換中に静的ファイルへのリクエストが待ち状態になってトップページの読み込みが遅いことがあるため静的ファイルへのリクエストはAPIサーバーに投げたくない
  2. APIサーバー(turbo)は許容しないデータサイズを受けるとHTTPエラーを返さずにコネクションを切断してしまう
  3. スクリプト等で連投するユーザーに制限をかけたい
  4. APIサーバーが複数あるときにリクエストを分散させたい

設定の例はappendix/waifu2x.nginx.confにあります.

  1. sudo cp appendix/waifu2x.nginx.conf /etc/nginx/sites-available/waifu2x.udp.jp (fill your domain)
  2. sudo ln -s /etc/nginx/sites-available/waifu2x.udp.jp /etc/nginx/sites-enabled/
  3. sudo service nginx restart

またclient_max_body_size 5242880nginx.confに追加することをおすすめします(API側の許容サイズ以上のリクエストはAPIサーバーの前で止めてHTTPエラーを返したい)。またlimit_req_zone(連投の制限)はコメントアウトされているため、必要な場合は運用にあった設定を行ってください。(デフォルトでは1分間に10個以上画像を投げると503エラーを返すようになっています)

ウェブページのカスタマイズ

  1. テンプレートwebgen/templates/index.html.erbを編集
  2. ruby webgen/gen.rb で各言語のHTMLを生成
  3. ./assets/*.htmlを確認