2017-05-25 5 views
1

NLPモデルを保存する最良の方法は何ですか?私は合計で約800メガバイトのNLPモデルを持っています。私のコードは、起動時にモデルをメモリにロードします。しかし、私はモデルを格納するための最良の方法は何か不思議です。それをgit repoに保存してから、ローカルシステムから直接ロードするか、S3のような外部の場所に保存してそこからロードする必要がありますか?それぞれのメリットとデメリットは何ですか?それとも、人々は私が考慮していない他の方法を使用していますか?Git Repo vs S3にNLPモデルを格納していますか?

答えて

0

NLPモデルをバージョン管理する必要がありますか?以前のNLPモデルに戻す必要はありますか?そうでない場合は、S3バケットにアーティファクトを格納するだけで十分です。長期間にわたって多くのNLPモデルを保管する予定の場合は、AWS Glacierもお勧めします。氷河は、長期間の保管には非常に費用対効果があります。

+0

私はatleastに現在および以前のバージョンを持っていることを計画しています。 gitに格納するとどうなりますか?非常に巨大なgit repoを持つ以外に不利な点はありますか? – user1692342

+0

気にしないでください。これは十分な説明です。 https://help.github.com/articles/what-is-my-disk-quota/ – user1692342

+0

私はソフトギターディスクの限界があることを知らなかった。学んだ教訓! – PrestonM

0

非常に良い質問ですが、ごく少数の人々が注意を払っています。

  • (1)保存するファイル(2)帯域幅のコスト:: ダウンロード/アップロードリソースのコスト(モデルなど)
  • レイジーダウンロード:ここで

    は、私が指摘し、いくつかの要因わけではありませんすべてのリソースがNLPシステムの実行に必要です。エンドポイントユーザーが目的にはあまり役立たない多くのリソースをダウンロードするのは頭痛です。言い換えれば、システムは、必要なときにその目的に必要なリソースをダウンロードする(理想的にはそれ自体)必要があります。
  • 便宜的に。

およびオプションは次のとおりです。

  • S3:利点は、あなたはそれが働いている場合、それは便利だということです。しかし、S3とAmazon AWSをよく知っている人は、システムの障害/支払い/その他を監視しなければならないという問題があります。それはしばしば高価です。あなたはスペースを持っていることを支払うだけでなく、より重要なのはあなたもバンド幅を支払うことです。ワード埋め込みや辞書(モデルに加えて)のようなリソースがあり、それぞれに数GBのものがある場合は、テラバイトの帯域幅使用量に達することは難しくありません。 AI2はS3を使用し、その用途にはsimple Scala systemです。彼らのシステムは "怠け者"である、すなわち、あなたのプログラムは、必要なときにのみ与えられたリソースをダウンロード(およびキャッシュ)する。

  • レポに保管してください:は確かレポに大きなバイナリファイルをチェックインするあなたのGitの歴史の外に大きなファイルを保つためにLFSを使用しない限り、良いアイデアではありません。これでも、ファイルへのプログラムによる呼び出しをどのように行うのかはわかりません。あなたが手動でファイルなどをダウンロードするためのスクリプトと指示を持っている必要があります(これは醜いです)。

私はあまりにもこれらの2つのオプションが追加している:

  • Mavenの依存関係:基本的には、JARファイルにすべてをパッケージ化し、それらを展開し、依存関係として追加します。以前はこれを使用していましたが、一部のプラグインでもそれを使用しています(例:StanfordNLP ppl、モデル依存関係としてモデルを追加するように依頼します)。私は個人的には推奨しません。なぜなら、主にMavenが大きなリソースを扱うように設計されていないからです(時にはハングするなど)。このアプローチは怠惰ではなく、つまり、Mavenはコンパイル/実行時にすべてを一度にダウンロードします。最初にStanfordCoreNLPを試してみると、使用する必要のない数ギガバイトのファイルをダウンロードする必要があります。これは頭痛です。また、Javaユーザーの場合は、classpathの操作がBIGx10の頭痛であることがわかります。

  • 独自のサーバー:、(Minioのような)ファイルマネージャサーバーをインストールしますが、あなたのファイルを保存し、必要な時はいつでも、あなたの希望の言語(their APIs are available for different languages in their github page)でサーバにプログラムから呼び出しを送信します。 We've written a convenient Java system to access it in Javaあなたに便利なかもしれません。これは、(S3とは異なり)高価ではないが(S3のような)怠け者の行動を与える(基本的にはS3のすべての利点を得るだろう)。

私の意見を要約すると、私は過去にS3を試しましたが、かなり便利でしたが、高価でした。多くの場合、アイドル状態のサーバーがあるため、Minioを使用しており、満足しています。ファイルを保存するための信頼できるリモートサーバーがある場合は、このオプションを使用します。

関連する問題