趣味で計算流砂水理

Computational Sediment Hydraulics for Fun

AWS-EC2-ubuntu18.04のポート転送によるインターネット接続

一般的には,AWSをプロキシサーバとして使うためのものかと思いますが,今回はプロキシ環境を抜けるためにAWS経由で外部に接続する環境を作ったのでその備忘録です.

基本的には, AWSのEC2とポート転送を利用して企業の網を抜けた話 - railsがんばる子 を参考にしましたが,もっとシンプルに作りました.

見よう見まねなので正しいのかはわかりません.

AWSインスタンスの起動

ここは出来ることが前提なので適当なサイトを参照してください.プロキシ環境を作るだけなので,EC2の無料枠でt2.microのubuntu18.04を起動する.

squidのインストール,設定

インストール

sudo apt install squid

設定ファイルですが,一応オリジナルはコピーしておきます.

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original

squid.confはいろいろな設定がありますが,今回は余計なことはせずにセキュリティ的には問題がありますが全てのアクセスを許可します. AWSへのアクセスの段階で十分セキュリティ対策をしているので大丈夫かと思います.

# And finally deny all other access to this proxy
http_access allow all ←追加
http_access deny all

ポートの設定も必須ですがオリジナルの3128のままにしておきます.

# Squid normally listens to port 3128
http_port 3128

設定を反映し起動します.

sudo systemctl reload squid

起動されていない場合は起動します.

sudo systemctl start squid

自動起動にする場合は以下のとおり.

sudo systemctl enable squid

AWSのSecurity groupのポート設定

AWS EC2でWEBサーバーを立ち上げよう(Apache編) - Traffic Jamのとおりです.

AWSインターフェイスが現時点で少し変わっていますが,「セキュリティグループ」の「インバウンド」の「編集」より,「カスタム TCP ルール」で上記のポート「3128」を追加します.

多分CLIでも出来るので分かれば追記します.

sshポートフォワーディング

ここまででssh接続は可能です.

今回はwindows10のWSL環境でsshのポートフォワーディングを行います.

localhostの3333に転送します.

オプションとして,

  • -N:リモートコマンドを実行しない
  • -f:バックグラウンドで実行

をつけます.

sudo ssh -i [key].pem ubuntu@[パブリック DNS (IPv4)] -L 3333:localhost:3128 -f -N

バックグラウンドで実行しているので切断するときは,「ps aux」でPIDを調べてkillコマンドを使うしかない?(自信がないです.)

あとは,インターネットオプションで「 接続 」-「 LANの設定 」- 「プロキシサーバー」で, アドレス: localhost,ポート: 3333(なんでもいい)とすれば完了です.

おまけ:windows10限定 sshポートフォワードディング機をモバイルホットスポット

windows10限定ですが標準でモバイルホットスポット機能が付いており,wifiが使えるノートPC等ではそれ自身をwifiの親機とすることができるので設定しておきました.

sshに-gオプションを追加

sshで接続時に-gオプションを追加

-g : リモートホストが転送されたローカルなポートに接続することを許可

sudo ssh -i [key].pem ubuntu@[パブリック DNS (IPv4)] -L 3333:localhost:3128 -f -N -g

モバイルホットスポットの起動

「設定」-「ネットワークとインターネット」-「モバイルホットスポット」からモバイルホットスポットをオンにして「インターネット接続を共有する」のwifiを選択する.

コントロールパネルのネットワーク接続に新たな接続が追加されているはずです.

モバイル端末のwifi接続,プロキシの設定

接続するモバイル機でwifiを検索して接続した後,上記で新たに追加された接続のIPアドレスとポート番号(今回は3333)を設定することで接続可能


結構苦戦しました・・・

オープンデータによる河川流解析:平面二次元流解析 : 数値計算編

computational-sediment-hyd.hatenablog.jp

の続きです.

数値計算は,特に変わったことはせずに普通の平面二次元計算です.

ドライベッドの処理

ちょっとサボって連続式だけに以下のような条件を付け加えました.

{ \displaystyle
    \begin{align}
        h^{n+1} = h^n - \frac{\Delta t}{\Delta x}( {q_x}_{i+1/2} - {q_x}_{i-1/2})
    \end{align}
}

if {q_x}_{i+1} == 0

 if {q_x}_{i} > 0

  {q_x}_{i+1/2} = {q _ x} _ { i }

 else : {q_x}_{i+1/2} = 0

else if {q_x}_{i} == 0

 if {q_x}_{i+1}  \lt 0

  {q _ x} _ {i+1/2} = {q _ x} _ {i+1}

 else : {q_x}_{i+1/2} = 0

ぎりぎり質量が保存される感じです.

今後修正します.

計算速度

computational-sediment-hyd.hatenablog.jp

numba.jitでまたまた衝撃的な速度です. 時間がかかり過ぎるので,計算時間を120分の1にしています.

  • numba.jitあり : 実時間3600sec 計算時間30秒
  • numba.jitなし : 実時間30sec 計算時間150秒

なんと600倍です.意味がわかりません.

コードはこちら


Wuさんの本のDry Bedの処理のところ(6.1.4 Wetting and drying technique)が面白いです.

Computational River Dynamics

Computational River Dynamics

AWS EC2上でのintel fortranのベンチマーク

computational-sediment-hyd.hatenablog.jp

をふまえて,

computational-sediment-hyd.hatenablog.jp

の続きです.

テストコードは前回と一緒です.

環境

環境について,AWS-EC2の環境について,容量不足でintel compilerが入らなかったので,前回よりストレージを無料枠の最大の30GBまで大きくしました.

AWS-EC2

  • EC2 t2.micro ストレージ30GB,東京リージョン:無料枠を利用
  • ubuntu18.04
  • gfortran GNU Fortran 7.3.0
  • ifort version 19.0.2.187

local-wsl-ubuntu

  • CPU:intel Core i7-8550U
  • windows10proのWSLのubuntu18.04
  • gfortran GNU Fortran 7.3.0
  • ifort version 19.0.2.187

local-windows10

結果

前回と少し結果が変わったので前回の条件のものも再記します.

AWS-EC2

  • gfortran : 6.4sec
  • ifort : 6.4sec
  • ifort -fast option : 6.4sec

local-wsl-ubuntu

  • gfortran : 5.2sec
  • ifort : 4.7sec
  • ifort -fast option : 4.3sec

local-windows10

  • gfortran : 5.4sec

考察

  • AWSの場合,intelを使っても全然早くない.なぜでしょう?大規模コードならもう少し差がでるかも.
  • localは,さすがintelさんです.
  • localのwindowsubuntuの差はほとんどない.
  • 上の結果からわかりませんが,AWSは各計算で計算時間がほとんど同じ.一方,localは他のタスクの影響をもろに受けるので時間差がでる.

もう少しいろいろ試してみます.


オープンデータによる河川流解析:平面二次元流解析 : 格子生成編

computational-sediment-hyd.hatenablog.jp

の詳細編です.

jupyterはこちら

格子生成

  • 原点の東経132.8143, 北緯35.4159,緯度から角度が26度
  • x軸(ξ軸)が1000m,y軸(η軸)が90m
  • メッシュサイズは5m

標高データの設定

  • さらに,周期境界で扱いやすくするため,平均河床勾配により正規化を行う.平均河床勾配は1/670.

出力

今回は,多次元データを取扱いのため,xarrayモジュールを使って,NetCDF形式で出力.

ds = xr.Dataset({'dz': (['x','y'], ZZZ)}, coords={'xc': (('x', 'y'), Qx), 'yc': (('x', 'y'), Qy)})
ds.to_netcdf('dz.nc')

ポイントと参考サイト

geoviewsによる描画

QuadMeshメソッドを使うことにより,曲線座標系の描画が非常に楽.

Quadmesh — HoloViews

Resampling Grids — GeoViews 1.6.2.post2+g5918985-dirty documentation

xarrayによるデータセットの作成

  • 今回は出力のみ使っているが,計算結果もxarrayによる出力している.多次元かつirregular gridsの扱いが容易.
  • NetCDFのファイルに入出力が可能であり軽量

Plotting — xarray 0.11.3+1.ga5cacb7 documentation

Serialization and IO — xarray 0.11.3+1.ga5cacb7 documentation

intel社さんからintel compiler for linuxを提供頂きました

経緯

intelのHP内に,Free Software Toolsのページあり,「Supporting qualified students, educators, academic researchers and open source contributors」と記載されております. そこで,Open Source Contributorの項目を辿ると,非商用ライセンスの申し込みのページがあり,個人情報やopen sourceの公開ページ(私はこのブログのgithubを記載),Project Description(私は河川の数値解析をオープンソースとして公開していると記載)を記載し,申し込みました.

すると,数日後intel社より,シリアルナンバー等が送られてきました. しかも,Intel® Parallel Studio XE Cluster Editionというフルパッケージです(50万円相当).

intel社さん,ありがとうございます.頑張ってopen sourceをアップします.

開発環境

提供いただいたのは良いのですが,手元にlinux環境がありません. 簡単に作れそうな環境として,WSL,AWSを利用しようと考えており,とりあえずWSLのみテストしました.

intel compiler on WSL

  • WSLのubuntu 18.04では,問題なく動きました.ただし,windows10のbuild 1803以降が条件です.1709では駄目でした. 詳しくはこちらを記事を参照

software.intel.com

  • インストール方法は以下を参照

qiita.com


AWSでの計算,ベンチマーク等は後日整理します.