医療系の共同研究が本格的に始まり
まずは専用PCへpythonの環境構築が及び
secureな方法の通信手段をどうするか?
機械学習だけではなくシステム全体の
ネットワーク環境を含めた設計イメージが必要になったため
こちらで学んだ知識をオープンにしていきたいと思います
余談ですが 私自身 臨床工学技士 という 医療従事者としても仕事をしているのですが
臨床工学技士は医療機器(薬機法では一部のソフトウェアも医療機器です)の専門家のため、
エンジニアとして院内のシステム開発に携わる方が多いのも特徴です!
国家資格でも、情報関係の問題があり
大学時代に勉強した内容が非常に役に立っていると思います!
臨床工学技士について興味ある方は
私が作成したこちらの動画を見ていただけると幸いです
さて、さっそく どのように機械学習システムを院内で活用するか考えるため
基礎的なネットワークの知識から復習したいと思います
基礎的なネットワークの部分から
TCP/IP
TCP/IPとは、インターネットを含む多くのコンピュータネットワークにおいて、
世界標準的に利用されている通信プロトコル
データの送受信に関わる一連の作業をまとめたもの
TCP/IPの階層は、以下のようになります
「アプリケーション層」:HTTP SMTP POP3 FTP etc...
「トランスポート層」:TCP UDP
「ネットワーク層」:IP
「データリンク層」:Ethernet FDDI ATM PPP
「物理層」:データを信号に、信号をデータに変換
URLとは
ネットワーク上の特定のデータなどを示すときに使われるのが
URL uniform resource locator
です
細かく見ると以下のように表せます
スキーム名:サービスの種類 http など
ドメイン:サーバーを特定 数字の場合もある
ポート番号:アプリケーションプロトコルを識別する番号
パス:サーバー内のファイルの住所
ファイル名:ファイル名は省略できる場合がある
遠隔ログイン
離れた場所にある別のコンピューターを操作できるサービスが遠隔ログインですが
種類があり 代表的なものにtelnet があります
telnet
Telnetとは、インターネットなどのTCP/IPネットワークを通じて別のコンピュータにアクセスし、
遠隔操作するための通信規約(プロトコル)の一つ。
Telnetは単純なテキストのやり取りのみを行なうため、テキストベースの他のプロトコルで動作するサーバにTelnetクライアントで接続し、リクエストなどを直接入力して操作やテストを行なう、といった使い方がされることもある。
Telnetそれ自体は認証や通信をまったく暗号化しないため、インターネットなど開かれたネットワークでそのまま使うことは危険であるとされる。このため、遠隔操作などの用途には暗号化に対応したSSHなどが使われることが多い。
ssh
SSHとは「Secure Shell」の略で、ネットワークに接続された機器を遠隔操作し、管理するための手段です。ポイントはSecure(安全)に!で、そのために必要な仕組みが用意されています。
#### デスクトップの共有
ネットワーク上の他のコンピュータのデスクトップ環境にアクセスし
ファイルやアプリケーションを操作する技術です
通信プロトコルはRDP remote desktop protocol を利用します
Linuxサーバーにデスクトップ接続する方法
##「アプリケーション層」
TCP/IPの5階層のうち一番上位に来るのがアプリケーション層です
コンピューター同士のやり取りをユーザーが利用できる
通信サービス という形にするのがこの層の役割です
そのため
クライアント と サーバーという概念をもっています
クライアント と サーバー のやり取りを定めたプロトコルがある
これをアプリケーションプロトコルといいます
アプリケーションソフトなどが個別の具体的な目的のために利用するプロトコルのことで、
TCP/IPの場合にはWebのデータを送受信するためのHTTPや、
ファイル転送のためのFTP、
メール送信のためのSMTP、
メール受信のためのPOPやIMAPなどがこれにあたります
アプリケーション層の役割が 「サービスを実現すること」
であるのに対して
アプリケーション層よりも下の層は 「通信を実現する事」が役割になります
「トランスポート層」
transport は 日本語で 運ぶ や 輸送する といった意味があり
トランスポートの役割は データを相手に届けることです
IPと併用するTCP(Transmission Control Protocol)やUDP(User Datagram Protocol)が有名。
TCP(Transmission Control Protocol)は信頼性のある通信路を実現してくれるため、
アプリケーションはネットワークの状態に関係なく(混雑で遅くなったり、送信が失敗したりしても気にせずに)、
データをやり取りできる。
UDP(User Datagram Protocol)はスピード重視
UDPのヘッダには、TCPと同様に送信元ポート番号と宛先ポート番号が設定されており、
ポートを指定した通信が可能です。
しかしTCPとは異なりコネクションレスの通信プロトコルであるため、
ハンドシェイクによるセッション確立や切断、
フロー制御、誤り制御、輻輳制御といった機能はありません。
一方的にメッセージを送る、メッセージ指向型のプロトコルです。
「ネットワーク層」
複数のネットワークを相互に接続した環境(インターネットワーク)で、機器間のデータ伝送を実現します。
IP(Internet Protocol)はこの層のプロトコルです
IP、ルーティングなど
ルーティングとはコンピュータが送信したデータ(パケット)を宛先のコンピュータまで適切に転送する処理のこと。
言葉の意味から、ルーティング(=routing)→道案内と理解できればまずはOK
単に道案内をするだけでなく、道路が渋滞しないように
一番効率的なルートでデータを届ける仕組みを提供するのがルーティングの役割です。
「データリンク層」
Ethernet
イーサネット (Ethernet) は、家庭・企業・データセンターなどで使用されるコンピューターネットワークにおいて、LANやWANを構成する有線ローカルエリアネットワークの主流な通信規格である。 その技術仕様はIEEE 802.3で規定されている
FDDI
ファイバ分散データインタフェース(FDDI)は、米国規格協会(ANSI)によって1980年代初頭に制定されたネットワーク規格で、最大100Mbpsの速度での動作に対応しています。 標準のFDDIネットワークは、一連のノードに対して逆方向に信号を伝送する2つのリングとともに、リングトポロジの中に設定されています。
「物理層」
データを信号に、信号をデータに変換
docker で python
テスト環境を作成するため
docker で動作確認をすることで
windowsでも python 仮想環境 の作成や シェルが動くかを試すことができます
自分のコンピュータの環境を汚すことなく、
隔離された環境を作ってそこでプログラムを動かすことができるので
トライアンドエラーも簡単で、
その作った環境はシェアすることでどこでも実行できるという点がメリットです。
上記の記事を参考に
docker-pythonフォルダを作業フォルダにした上で
Dockerイメージ(仮想環境のテンプレート)の作成し、
そのイメージを利用してDockerのコンテナ
(テンプレートを利用して作られ実際に実行される仮想環境が入った入れもの)を起動します。
以下のようなイメージとなります
docker ubuntuで シェルコマンドの動作確認
シェルの一例ですが
docker ではコマンドを使う必要があるので
以下にコマンドの一例を示します
echoコマンド で 文字出力
echo "hello python"
echoコマンドの出力先をファイルにリダイレクトする。
echo "hello world" > foo.txt
#cat コマンドでファイルの内容を表示する
cat foo.txt
ファイルをコピーする
cp foo.txt bar.txt
ファイルの名前を変更する
mv bar.txt new.txt
ファイルを削除する
rm new.txt
ディレクトリを作成する
mkdir test
同じファイル名で testディレクトリ にファイルをコピーする
cp foo.txt test
ファイル名を変えて testディレクトリ にファイルをコピーの場合
cp foo.txt test/bar.txt
ファイル/ディレクトリの名前を変更する
mv bar.txt new.txt
ツリーの最上位をルートディレクトリと呼びます
「ファイルパス」とは、ファイルツリーにおいて、各ディレクトリやファイルの位置をテキストで記述したもの。
ルートディレクトリの一覧を表示する場合は以下のコマンドです
ls -al /
コマンドの実行履歴を表示する
history
コマンドの実行履歴をviを活用し
bash とすることもできhistory は便利なコマンドです
シェルスクリプトの活用
pythonモジュールの実行を含めた シェルスクリプトを作ることで
ネットワークで接続した後にも自動で実行する仕組みを作成可能です
共同研究ではpython のモジュールを安全に実装する仕組みが必要でしたが
セキュリティを考えたネットワーク接続 や シェルスクリプトの活用がイメージできました
docker を利用することで 自分のコンピュータの環境を汚すことなく、
テスト環境を模擬的に作ることもできるため おすすめです