自然言語処理100本ノック 2020年版
やってます。
新卒入社当時、直属の先輩方からおすすめされた教材。
結局2015年版は完走せずに放置していたので、この機会に 取ったばかりのE資格の内容やNLP基礎の復習も兼ねて 100本やり切ってみようと思う。
Google Cloud Platformの無料トライアルを使って、新型コロナ解析に貢献する話
はじめに
前回の記事で、AWSのインスタンス上にFolding@Homeを乗せて新型コロナの解析を試みたのですが、インスタンスの制約上あまりうまくいきませんでした。 本記事は、同様のことをGoogle Cloud Platformの無料トライアル枠でやってみたものです。 今回は、 トライアルに申し込むともらえる 12か月使える$300分のクレジット を活用していきます。
やったこと①: アカウント作成
今回はアカウントを作るところから。
- https://cloud.google.com/にアクセスし、「無料トライアル」をクリック
- Googleアカウントでログイン
- 利用規約への同意、個人情報の入力
- ここでクレジットカードの情報を求められるが、あくまで個人確認のためのもの。無料枠クレジットを超過しても、インスタンスを止められるだけで追加料金は発生しない。
やったこと②: プロジェクトの作成
今回の用途のために、プロジェクトを新しく作成。
- 画面右上の"My First Project"と書かれた部分をクリック。ポップアップした画面内の「新しいプロジェクト」をクリック
- 適当にプロジェクト名を入力して作成。
- 自動では切り替わらないので、もう一度"My First Project"をクリックし、ポップアップ画面から作ったプロジェクトを選択し、「開く」。
やったこと③: VPC環境の作成
AWSで試したとき同様、VPC環境をまず構築し、その中にインスタンスを立てる。
③-1. VPC+サブネット作成
- 「作成」を押して完了。
③-2. ファイアウォール設定
- 画面下部に、作成したVPCが表示されるので、VPC名をクリック
- 「ファイアウォール ルール」 -> 「ファイアウォールルールを追加」の順にクリック
- 以下のように入力し、「作成」。
- 自分だけアクセスできればよいので、「ソースIPの範囲」には、自分自身のIPアドレスを入力(例:
100.101.102.103/32
)
- 自分だけアクセスできればよいので、「ソースIPの範囲」には、自分自身のIPアドレスを入力(例:
上記の要領で、以下2つのポートについても設定。
- tcp: 7396 (Folding@HomeのWebコントローラ用)
- tcp: 49152~65535の範囲の好きな数字 (SSH接続用)
最終的に以下のようになる。(tcp:22はこの後の手順で削除する)
やったこと④: VPC上にVMインスタンス構築
③で作ったVPC環境上に、VMインスタンス(AWSで言うEC2)を作成。
④-1. インスタンス作成
- 画面左のメニューから、「Compute Engine」->「VMインスタンス」を選択し、「作成」をクリック
- 以下のように設定する。(スクショ省略。まだ作成はしない。)
- 記載のないものはデフォルトのまま。
- 今回はマシンとして、完全無料の
f1-micro
ではなく、CPUをまるまる1コア使えるn1-standard-1
を選んだ。記事執筆時点では、下記設定で月額$24.67なので、1年間回しても無料クレジットが枯渇しない計算になる。
項目 | 設定値 |
---|---|
リージョン | us-west1 |
ゾーン | us-west1-b |
マシン | n1-standard-1 |
CPUプラットフォーム | 自由 |
ブートディスク | Debian GNU/Linux9(stertch) 10GBの標準永続ディスク |
ファイアウォール | どちらもチェックを外す |
- 画面下部の「管理、セキュリティ、ディスク、ネットワーク、単一テナンシー」をクリック
- 「ネットワーキング」タブの「ネットワークインターフェース」で、③で作成したVPC環境を選択し「完了」。
- 「作成」をクリックすると、VMが作成され、起動する。
④-2. root権限を持ったユーザの新規作成
- VMインスタンスの一覧画面で、作成したVMインスタンスの名前部分をクリック
- 詳細画面が出るので、画面上部の「編集」をクリック
- 画面下部に、「SSH 認証鍵が0 個あります」と書かれた箇所があるので、その下の「表示して編集する」をクリック
- 以下のようなボックスが出るので、公開鍵ファイルの中身をコピペする。
- うまくいくと、ボックスの左側にユーザ名が表示される。 この名前がLinuxに新規登録されるユーザ名になる。
- 「保存」を押して完了
やったこと⑤: Linuxの設定
SSHのポート番号変更
/etc/ssh/sshd_config
を編集し、以下の1行を追加する
Port *****
- ファイル更新後、以下のコマンドを実行
$ sudo service sshd reload
やったこと⑥: Folding@Homeの導入
最低限必要なFAHClient
のみ導入。
インストール
$ wget https://download.foldingathome.org/releases/public/release/fahclient/debian-testing-64bit/v7.4/fahclient_7.4.4_amd64.deb $ sudo dpkg -i --force-depends fahclient_7.4.4_amd64.deb
- 以下のような画面がでてくるので、ユーザ名等を対話式で入力。
- 設定しなくとも動作はするので、わからなければ空白でOK。
設定
/etc/fahclient/config.xml
を開き、末尾の</config>
の前に以下2行を追記する。- Webコントローラへのアクセス権限設定。xxx.xxx.xxx.xxxのところに自分のIPアドレスを記入
<allow>127.0.0.1 xxx.xxx.xxx.xxx</allow> <web-allow>127.0.0.1 xxx.xxx.xxx.xxx</web-allow>
設定反映&サービス再起動
- 以下のコマンドでサービスを再起動。
- 補足: タスク処理中にstopしても、次startしたときはちゃんと続きから計算してくれる。
$ sudo /etc/init.d/FAHClient stop $ sudo /etc/init.d/FAHClient start
動作確認
- Webブラウザで
http://<VMインスタンスの外部IPアドレス>:7396
にアクセスする。- 以下のような画面が出たらOK。すでにタスクを取得している場合、進捗状況等表示される。
結果
- 今のところ不具合もなく、1タスク10時間程度でこなせている。
まとめ
AWSの無料枠でCOVID-19解析に貢献しようとしてうまくいってない話
はじめに
「新型コロナウイルスの解析に貢献しつつ、AmazonWebServiceの環境構築を実践してみよう」とした話です。 結果、「正常に動作はしたが、無料枠ではスペック不足ゆえにあまり貢献できていない」という結論になってしまいましたが、 作業の記録として、残しておきます。
背景
コロナ流行辛い。なんとか解決早めらんないか。
↓
「今からでも3分ではじめられるコロナ解析貢献「Folding@home」の使い方」というPC Watchの記事を見つける
↓
即自宅ノートPC(旧世代のGPU搭載)にインストール。1週間程度走らせ続けて25タスクほどこなすが、まだ物足りない感。
↓
スペックは上げられないから、稼働台数増やしたい。でも物理マシンは1台しかもっていない...
↓
そうだAWSアカウント持ってた。これ使ってみよう。無料枠でできるなら記事化すれば真似してくれる人いるかも?
↓
行動。
やったこと①: VPC環境の作成
VPC環境をまず構築し、その中にEC2環境を立てることにした。 基本、こちらのブログ記事の通りに作業。
唯一セキュリティグループだけは、今回の利用目的に合わせて以下のように変更。
- Webサービスを立てるわけではないので80番ポートはクローズ。
- 代わりに、Folding@HomeのWebコントローラ用に7396番を開放
- セキュリティ対策として22番以外のSSH用ポートを開放、初期ログイン用に22番はいったん残す。
- 今回の環境は「自分だけアクセスできればいい」ので、ソースはすべてマイIPに限定
やったこと②: VPC上にEC2環境構築
①で作ったVPC環境上に、EC2環境を作成。この作業もこちらのブログ記事を参考にした。
今回は無料利用枠で作れる環境にしたかったので、構成は以下の通り
やったこと③: Linuxの設定
- SSHのポート番号変更
$ sudo vi /etc/ssh/sshd_config ### 22行あたりに以下を追加(①で指定したポート番号) Port 2**** ### 保存後 $ sudo service sshd reload
- EC2作成時とは別のRSA鍵でアカウントを作り、デフォルトの"ec2-user"削除
### ユーザ新規作成(root権限) # useradd newuser # passwd newuser ### SSH設定(root権限) # cd /home/newuser/ # mkdir .ssh # chmod 700 .ssh # chown newuser:newuser .ssh ### ここで公開鍵をSCPで送信 # mv /home/ec2-user/id_rsa.pub .ssh/authorized_keys # chmod 600 .ssh/authorized_keys # chown newuser:newuser .ssh/authorized_keys ### sudoできる権限を与える # usermod -aG wheel newuser ### 別窓で"newuser"としてログイン。以降newuser側の画面で操作 $ sudo su - ### rootになれることを確認したら、ec2-user削除 # userdel ec2-user
やったこと④: Folding@Homeの導入
今回は、最低限必要なFAHClientのみ導入。
- インストール
$ wget https://download.foldingathome.org/releases/public/release/fahclient/centos-5.3-64bit/v7.4/fahclient-7.4.4-1.x86_64.rpm $ sudo rpm -i --nodeps fahclient-7.4.4-1.x86_64.rpm
- 設定
/etc/fahclient/config.xml
を編集。更新にはroot権限必須。
<config> <!-- GPUを使うか --> <!-- Folding Slot Configuration --> <gpu v='false'/> <!-- どの程度CPU資源を利用するか。light,middle,fullの3択 --> <!-- Slot Control --> <power v='full'/> <!-- ユーザ情報。ユーザ名を入れておけば個人でどれだけ貢献したか集計される --> <!-- User Information --> <user v='deflat'/> <!-- スロット番号とタイプ。今回はCPU1個しかないのでいじらない --> <!-- Folding Slots --> <slot id='0' type='CPU'/> <!-- Webコントローラへのアクセス権限設定。xxx.xxx.xxx.xxxのところに自分のIPアドレスを記入 --> <allow>127.0.0.1 xxx.xxx.xxx.xxx</allow> <web-allow>127.0.0.1 xxx.xxx.xxx.xxx</web-allow> </config>
- 設定反映&サービス再起動
- タスク処理中にstopしても、次startしたときはちゃんと続きから計算してくれる。
$ sudo /etc/init.d/FAHClient stop $ sudo /etc/init.d/FAHClient start
結果
- Webブラウザで
http://<EC2環境のIPアドレス>:7396
にアクセスすると、下記のようにちゃんと動いているのが見える。 ...が、めちゃくちゃ処理が遅い- 画像は処理開始から24時間ほどたったときのもの。個人持ちのノートPCでも、このくらいなら3~4時間で終わるはず。
後から調べて分かったこと
- EC2のt2インスタンスには、「CPUクレジット残高」という概念があり、これが枯れている状態だと使えるCPU資源が限定される。
まとめと感想
【駄文】籠城生活の経過報告
えらい放置してた。のでなんか書いてみる。
水曜日に会社から帰宅してから、一度も家を出ることなく、 今ちょうど100時間。
「誰とも会わない」こと自体はべつに苦でもないし、 食料備蓄もあるので、今のところ問題はなし。
「この期に及んで、急用でないのに外歩いてる人たち、 本気で(--自主規制--)では...?」 ....みたいな、よろしくない妄想にとらわれたりとかはするけど。
会社の制度とかもろもろに助けられ、現在自宅で仕事ができる状態なので、 週明け後も、しばらくこの籠城生活は続けてみよう、と思う。
Anacondaでの仮想環境の使い方 Ver. 2019.03
はじめに
記事の趣旨
googleで「Anaconda 仮想環境」で検索したときにヒットする情報が古いものばかりなので、現在公式サイトで配布されている Anaconda 2019.03 における仮想環境の作り方をまとめておきます。
想定読者
- Python環境としてAnaconda(Anaconda 2019.03)を利用している(OS不問)
- Anacondaにおける「仮想環境」とは何かを知っている
注意点
しつこいようですが、この記事はAnaconda 2019.03における仮想環境の作り方についてのものです。 将来の更新でこの手順が使えなくなる可能性は大いにあるので、未来から来た方はご注意を。
事前準備
condaモジュールの最新化
- 処理にあたってcondaモジュールを最新版にアップデートする。
- Windows + Git bashでAnacondaを使っている場合、本手順必須。 配布されているバージョンのcondaモジュール(4.6.11)で、バグが発生することが報告されています(参考:github内Issueページ)。
$ conda update conda
初期設定
- 各種シェルの起動時に、Anacondaの設定が走るようにする。
- 以下のコマンドを、今後condaコマンドを実行する予定のあるシェル上で実行する。
$ conda init <シェル名>
<シェル名>
には、コマンドを実行しているシェルの名前のうち、最も適しているものを以下から入力する。- シェルを再起動し、画面上に
(base)
と表示されたら成功
仮想環境の使い方
新規作成
# 実行のための最低限のモジュールだけ入っていればいい場合 $ conda create -n <仮想環境名(任意)> python=<pythonバージョン> # インストール時にbase環境に入っていたもろもろのパッケージ含めた環境を作りたい場合 $ conda create -n <仮想環境名(任意)> python=<pythonバージョン> anaconda
仮想環境一覧の取得
$ conda info -e # conda environments: # base * D:\conda py27 D:\conda\envs\py27 py36 D:\conda\envs\py36
仮想環境の有効化
$ conda activate <仮想環境名>
- 画面上の表記が
(<指定した仮想環境名>)
に変われば成功 - 過去バージョンではここが「OSによってコマンドが変わる」とか「同名コマンドがあるからシェル芸で対処しなくちゃいけない」とか言われていたが、全OS共通でこの独自コマンドを使うようになった模様
仮想環境の無効化
$ conda deactivate
- 画面上の表記が
(base)
に変われば成功
仮想環境の削除
$ conda remove -n <仮想環境名> --all
自己紹介
はじめまして
サイトだけ作って何も書いていませんした。自己紹介だけでも書いておきます。
個人のこと
プログラミングのこと
- お仕事: 某メーカー系企業勤務
- 使っている言語
- 得意:
- 機械学習関連
- 弱点:
- Web系の知識
ボードゲームのこと
- オフのボドゲ会に行くことはほとんどなく、BoardGameArenaに入り浸っている
- 好き:
- 十二季節の魔法使い
- バックギャモン
このブログのこと
- 公私問わずプログラミングがらみで躓いたこと、共有したいことがメインになりそう
- とは言いつつそれ限定にするつもりはないです
- 休業宣言したtwitter代わりにできればいいかな、と。
というわけで
果たしてみる人がいるかわかりませんが、よろしくお願いします。