現在作成中のコンピュータ将棋プログラムの学習ルーチンを、分散コンピューティング的に「学習に協力して下さる方(以下、クライアント様と記載)のPC」と「私の自宅のPC(以下、サーバと記載)」で分散処理をしようと考えています。
ここで問題になったのが、大容量のパラメータファイル(400MB弱)をサーバ→全クラアント様に配布し、クライアント様の学習結果(これも同容量)を全クライアント様→サーバに転送する必要がある事です。
レンタルサーバを借りてクラアント様・サーバ間の中継をする方法も検討したのですが、大容量の転送が可能なレンタルサーバは高価ですので、無料で出来る方法を検討中です。
可能であれば、クラアント様とサーバが直に通信出来ればベストなのですが、どういった技術を使えば可能でしょうか?
当方、C++/Java/Python等でしたらプログラミング可能です。(他言語でより良い方法があれば、その言語を勉強して実装する事も視野に入れています。)
ポイントは当方が有益と判断した順に傾斜配分させて頂きます。
分散コンピューティング化の概要は https://gasyou.hatenablog.jp/entry/2020/01/05/160236 に記載しました。
また、転送するデータはバイナリデータになります。
自宅のサーバと任意のクライアントがツーツーでつながっちゃうと、色んなデータをやり取りできちゃうわけで、お互いにセキュリティ的な面でのあれなことがありそうですが、その辺りは無視します。
また、「大容量」、「無料(なるべく安く)」、「速度的な話」は、それぞれの判断基準によって許容できるレベルがあるでしょうから、その辺りの判断も質問者に任せます。
もし、自分でそのような状況になったときにどうするだろう、と考えてみました。
■グローバルIPを取得して、自宅サーバを公開する
これが一番直接的な方法だと思います。
無料で、ってわけには行きませんが、プロバイダによって値段は大きく変わります。
"自宅サーバ 固定IP" みたいなキーワードで検索すると情報が引っかかります。
公開する自宅のサーバは、普段は物理的に自宅の他の機器とは切り離しておく。
80 みたいなノーマルなポートは全部閉じておいて、一般的ではないポートでプログラムと使って通信する、かな。
■グローバルIPではない方法で、自宅サーバを公開する
https://www.technoveins.co.jp/tvblog/index.php/all-contents/87-connection/45-1
↑みたいなあたり。
最初のとあまり変わらない感じですけれど。
■フリーのレンタルサーバを使う
ときによって選択肢は変わってきますが、この回答を書いている時点であれば XFREE とか StarServer とか。
XFREE で 1GB、StarServer で 2GB 。
クライアントからサーバにデータを送って、自宅サーバからデータを取得したらデータを消す。
リアルタイムでやり取りする感じではなさそうなので、適切にスケジューリングすれば、それなりに数はさばけそうな気がします。
■有効期限があるフリーのストレージサービスを使う
一時的にファイル転送をするようなサービスを使う。例えば、FireStorage のような。
http://firestorage.jp/
クライアントに仕込んだプログラムでは、サービスにファイルをアップロードして、アクセスするための URL をメールで送るなり、フリーのサーバに保存しておくなりしておく。
有効期限が切れる前に、自宅からデータを取得。
自分でプログラムが書ける方ということですから、後は値ごろ感なりパフォーマンス的なところを勘案してみてください。
無料のオンラインストレージサービスのURLです。
データ共有することで解決できると思います。
参考になさってください。
MEGA | 50GB | https://mega.co.nz/
hubiC | 25GB | https://hubic.com/en/
Google Drive | 15GB | https://www.google.com/intl/ja_jp/drive/
4shared |15GB | http://www.4shared.com/?locale=ja
4Sync | 15GB | https://ja.4sync.com/
BOX | 10GB | https://www.box.com/ja-jp/home
MediaFire | 10GB | http://www.mediafire.com/
TeraCLOUD | 10GB | https://teracloud.jp/ja/
iCloud Drive | 5GB | https://www.apple.com/jp/icloud/icloud-drive/
OneDrive | 5GB | https://onedrive.live.com
Yahoo!ボックス | 5GB | http://info.box.yahoo.co.jp/index.html
CoreDrive | 5GB | https://coredrive.com/jp/
Dropbox | 2GB | https://www.dropbox.com/ja/
FINALBOX | 1GB | https://finalbox.net/index-jp.php
Stock | 1GB | https://www.stock-app.info/
オンラインストレージ経由ではなく、クラアント様のPCとサーバが直にやり取りする方法が知りたいです。
オンラインストレージ経由ではなく、クラアント様のPCとサーバが直にやり取りする方法が知りたいです。
例えば、LAN内であればJava RMIを使用してやり取りが可能かと思いますが、そういう事をインターネット経由で実現したいです。
自宅のサーバと任意のクライアントがツーツーでつながっちゃうと、色んなデータをやり取りできちゃうわけで、お互いにセキュリティ的な面でのあれなことがありそうですが、その辺りは無視します。
また、「大容量」、「無料(なるべく安く)」、「速度的な話」は、それぞれの判断基準によって許容できるレベルがあるでしょうから、その辺りの判断も質問者に任せます。
もし、自分でそのような状況になったときにどうするだろう、と考えてみました。
■グローバルIPを取得して、自宅サーバを公開する
これが一番直接的な方法だと思います。
無料で、ってわけには行きませんが、プロバイダによって値段は大きく変わります。
"自宅サーバ 固定IP" みたいなキーワードで検索すると情報が引っかかります。
公開する自宅のサーバは、普段は物理的に自宅の他の機器とは切り離しておく。
80 みたいなノーマルなポートは全部閉じておいて、一般的ではないポートでプログラムと使って通信する、かな。
■グローバルIPではない方法で、自宅サーバを公開する
https://www.technoveins.co.jp/tvblog/index.php/all-contents/87-connection/45-1
↑みたいなあたり。
最初のとあまり変わらない感じですけれど。
■フリーのレンタルサーバを使う
ときによって選択肢は変わってきますが、この回答を書いている時点であれば XFREE とか StarServer とか。
XFREE で 1GB、StarServer で 2GB 。
クライアントからサーバにデータを送って、自宅サーバからデータを取得したらデータを消す。
リアルタイムでやり取りする感じではなさそうなので、適切にスケジューリングすれば、それなりに数はさばけそうな気がします。
■有効期限があるフリーのストレージサービスを使う
一時的にファイル転送をするようなサービスを使う。例えば、FireStorage のような。
http://firestorage.jp/
クライアントに仕込んだプログラムでは、サービスにファイルをアップロードして、アクセスするための URL をメールで送るなり、フリーのサーバに保存しておくなりしておく。
有効期限が切れる前に、自宅からデータを取得。
自分でプログラムが書ける方ということですから、後は値ごろ感なりパフォーマンス的なところを勘案してみてください。
詳細にありがとうございます。
とりあえずは自宅サーバを公開するか、Google Drive経由でファイル転送する方向で検討しています。
また、リンク先からVPNの知識が得られましたので、VPNを構築してJava RMIを使用するのも、将来的な選択肢になりそうです。
http://www.vector.co.jp/magazine/mobile/mobilepage.html?seno=507014
このソフトならサーバ・クライアント間で直にデータ送受信できます。
今回はプログラム単体で完結させたいので、ご紹介頂いたソフトの使用は見送ります。
詳細にありがとうございます。
2020/01/07 12:24:56とりあえずは自宅サーバを公開するか、Google Drive経由でファイル転送する方向で検討しています。
また、リンク先からVPNの知識が得られましたので、VPNを構築してJava RMIを使用するのも、将来的な選択肢になりそうです。