tag:crieit.net,2005:https://crieit.net/users/KJMAN678/feed koji/メガネ男の投稿 - Crieit Crieitでユーザーkoji/メガネ男による最近の投稿 2020-12-21T18:14:54+09:00 https://crieit.net/users/KJMAN678/feed tag:crieit.net,2005:PublicArticle/16400 2020-12-21T18:14:54+09:00 2020-12-21T18:14:54+09:00 https://crieit.net/posts/streamlit streamlitを使って簡単な機械学習アプリのデプロイに挑戦した <p><img src="https://storage.googleapis.com/zenn-user-upload/uph2nf5e0demd63oof0xc1ea5jf6" alt="" /></p> <p><a target="_blank" rel="nofollow noopener" href="https://twitter.com/dala00">だらさん</a>の<a href="https://crieit.net/advent-calendars/2020/crieit">なんでも Advent Calendar 2020</a>、21日目の記事になります。</p> <p><a target="_blank" rel="nofollow noopener" href="https://zenn.dev/megane_otoko/articles/016_deploy_ml_streamlit">こちらの記事</a>と同じ内容になります。</p> <p>お手軽にPythonでウェブアプリが作成できる<a target="_blank" rel="nofollow noopener" href="https://docs.streamlit.io/en/stable/index.html">Streamlit</a>で機械学習アプリのデプロイに挑戦しました。</p> <p>ローカルサーバーではちゃんと動くのですが、残念ながらherokuでのデプロイは出来ませんでした。</p> <p>デプロイのログを見る限りエラーは発生していないようなのですが、ブラウザでURLを開くとアプリケーションエラーと表示されてしまいます。</p> <p><img src="https://storage.googleapis.com/zenn-user-upload/dzifq4qhh2955e1qkz8c08ydwg1p" alt="" /></p> <p>streamlit.io/sharing を使うとGitHubと連携させるだけでデプロイできるそうですが、現時点でまだ正式登録待ちです。</p> <p>検証の過程が役に立つかもと思い、途中ではありますがブログにアップします。</p> <p>コードは<a target="_blank" rel="nofollow noopener" href="https://github.com/KJMAN678/streamlit">こちら</a>。</p> <p>環境は以下のとおり。</p> <pre><code class="python">Windows10 python==3.6.9​ (Herokuのデフォルト) streamlit==0.60.0 numpy==1.18.2 pandas==1.1.5 plotly==4.14.1 scikit-learn==0.23.2 lightgbm ==3.1.1 </code></pre> <h3 id="ローカルサーバー上の画面"><a href="#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E4%B8%8A%E3%81%AE%E7%94%BB%E9%9D%A2">ローカルサーバー上の画面</a></h3> <p>作ろうとしたのは、<a target="_blank" rel="nofollow noopener" href="https://www.kaggle.com/c/house-prices-advanced-regression-techniques">kaggleのHousePrice</a>コンペのデータセットを使ってWeb画面上で簡単な予測モデルを作成するアプリになります。</p> <p>HousePriceのコンペ自体については下記のサイトをご参考ください。<br /> <a target="_blank" rel="nofollow noopener" href="https://nehori.com/nikki/2019/12/25/kaggle-2/">https://nehori.com/nikki/2019/12/25/kaggle-2/</a><br /> <a target="_blank" rel="nofollow noopener" href="https://nehori.com/nikki/2019/12/31/post-14406/">https://nehori.com/nikki/2019/12/31/post-14406/</a></p> <p>ややこしいので欠損値を含むカラムは全て削除しています。</p> <p>左の選択画面から特徴量を6つ選ぶと、train.csvの8割を使ってlightGBMで残り2割のデータのSalesPriceを予測し、実績データと予測データをグラフで比較することができます。</p> <p>なお、特徴量は6つ全部違うものを選ぶ必要があります。</p> <p><img src="https://storage.googleapis.com/zenn-user-upload/hyewdrnnt324baazxiydenn3s439" alt="" /></p> <p><img src="https://storage.googleapis.com/zenn-user-upload/lmxihlpx2i268jagxzurhulvvtb4" alt="" /></p> <p>参考用に、読み込んでいるtrain.csvと、各特徴量とSalesPriceの相関係数を表示しています。</p> <p>評価指標としてRMSEとR2スコアを表示します。</p> <h3 id="herokuでのデプロイ検証"><a href="#heroku%E3%81%A7%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E6%A4%9C%E8%A8%BC">herokuでのデプロイ検証</a></h3> <p>先ほど書いたとおり、結果としてHerokuへのデプロイは出来なかったのですが、参考までに検証した事を記載します。</p> <p>基本的には下記のサイトを参考にしました。<br /> <a target="_blank" rel="nofollow noopener" href="https://qiita.com/Nate0928/items/632e7d54c2f9c17e242b">https://qiita.com/Nate0928/items/632e7d54c2f9c17e242b</a></p> <p>Heroku CLIの導入は下記サイトをご参考ください。<br /> <a target="_blank" rel="nofollow noopener" href="https://qiita.com/tetsu-sh/items/f6fcbb6b85df04e5cf3f">https://qiita.com/tetsu-sh/items/f6fcbb6b85df04e5cf3f</a><br /> <a target="_blank" rel="nofollow noopener" href="https://note.com/on_bass/n/n0495484a2b2b">https://note.com/on_bass/n/n0495484a2b2b</a></p> <p>ターミナルからherokuへログインする際、[Can't open browther]となって処理が進まなかったのですが、後ろに --interactive と付けてやればOKです。</p> <pre><code class="python">heroku login --interactive </code></pre> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/shosho/items/41183091769a8693a8a5">https://qiita.com/shosho/items/41183091769a8693a8a5</a></p> <p>herokuへのデプロイの手順は、<a target="_blank" rel="nofollow noopener" href="https://dashboard.heroku.com/">heroku の HP</a>のDeployタブをクリックすると手順が書いてありますので参考になります。</p> <p><img src="https://storage.googleapis.com/zenn-user-upload/lzd91o1xyh25mo4rjk6krbywkk11" alt="" /></p> <p>言語に対応するビルドパックを設定してあげないとエラーになるので設定しましょう。</p> <pre><code class="python">heroku buildpacks:add heroku/python </code></pre> <p><a target="_blank" rel="nofollow noopener" href="https://devcenter.heroku.com/articles/python-support">https://devcenter.heroku.com/articles/python-support</a></p> <p>setup.sh には、メールアドレスを記載するパターンと、記載しないパターンがあるようです。</p> <p>GitHub等に公開するのであればメールアドレスは記載したくないところです。</p> <p>記載しないパターンは下記サイトが参考になりました。</p> <pre><code class="python">mkdir -p ~/.streamlit echo "[server] headless = true port = $PORT enableCORS = false " > ~/.streamlit/config.toml </code></pre> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/streamlit/streamlit/issues/1636">https://github.com/streamlit/streamlit/issues/1636</a></p> <h3 id="streamlit.io/sharing"><a href="#streamlit.io%2Fsharing">streamlit.io/sharing</a></h3> <p>streamlit.io/sharing を使えば GitHub と連携させることで無料でStreamlitから直接アプリをデプロイできるようです。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.streamlit.io/sharing">https://www.streamlit.io/sharing</a></p> <p>招待をリクエストすると、毎週招待する旨のメールが届きました。</p> <p>残念ながらアドベントカレンダーの担当日までにデプロイすることができませんでしたが、Streamlit.io/shareing の認証が下りるのを待ちたいと思います。</p> <p>以上になります、最後までお読みいただきありがとうございました。</p> koji/メガネ男 tag:crieit.net,2005:PublicArticle/16266 2020-12-07T06:46:30+09:00 2020-12-07T06:46:30+09:00 https://crieit.net/posts/Google-Colab-Datalore Google Colab と Datalore を比較してみた <p><img src="https://storage.googleapis.com/zenn-user-upload/aj8eo0gj7n094047i3401ipar0mq" alt="" /></p> <p><a target="_blank" rel="nofollow noopener" href="https://twitter.com/dala00">だらさん</a>の<a href="https://crieit.net/advent-calendars/2020/crieit">なんでも Advent Calendar 2020</a>、7日目の記事になります。</p> <p><a target="_blank" rel="nofollow noopener" href="https://zenn.dev/megane_otoko/articles/014_compare_cloud_ml">Zenn に投稿した記事</a>と同じ内容になります。</p> <p>ブラウザ上で無料でPythonが使えるツール、<a target="_blank" rel="nofollow noopener" href="https://colab.research.google.com/">Google Colab</a>と<a target="_blank" rel="nofollow noopener" href="https://datalore.jetbrains.com/">Datalore</a>を比較してみました。</p> <h2 id="ログイン"><a href="#%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3">ログイン</a></h2> <p><strong>Google Colab</strong></p> <p>Googleのアカウントでログインします。</p> <p><strong>Datalore</strong></p> <p>Google、またはJetBrainsのアカウントを使ってログイン、またはメールアドレスを使ってDataloreのアカウントを作成してログインします。</p> <h2 id="画面"><a href="#%E7%94%BB%E9%9D%A2">画面</a></h2> <p>両者ともにおおむね同じですが、Google Colab は Shift + Enter でセルの追加ができませんが、Datalore は出来るようです。</p> <p><strong>Google Colab</strong></p> <p>Google Colab は左上のボタンでセルを追加するときにコードにするかテキスト(markdown)を選べます。</p> <p><img src="https://storage.googleapis.com/zenn-user-upload/6ppqbypb16nc3tgftxd33s1ekefv" alt="" /></p> <p><strong>Datalore</strong></p> <p>Dataloreはセルの右上にあるエディタでコードとテキスト(markdown)の切り替えができます。</p> <p><img src="https://storage.googleapis.com/zenn-user-upload/xpxyyxq5zrrog6nnuo5emx6e024o" alt="" /></p> <p>また、Datalore はセルの右下に小さく、実行にかかった時間が表示されるようです。</p> <h2 id="料金"><a href="#%E6%96%99%E9%87%91">料金</a></h2> <p><strong>Google Colab</strong></p> <p>原則無料。</p> <p>有料版のGoogle Colab Pro は月額9.99ドルですが、米国とカナダでしか使用できません。</p> <p><strong>Datalore</strong></p> <p>コミュニティプランは無料、プロフェッショナルプランは月額19.90ドルです。</p> <p>プロフェッショナルプランは日本からでも契約出来ました。</p> <h2 id="データセットの保存先"><a href="#%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E3%81%AE%E4%BF%9D%E5%AD%98%E5%85%88">データセットの保存先</a></h2> <p><strong>Google Colab</strong></p> <p>手動でアップロードするか、Google DriveをマウントしてGoogle Drive内のデータを使用する。</p> <p><strong>手動でアップロード</strong></p> <pre><code class="python">from google.colab import files uploaded = files.upload() </code></pre> <p><img src="https://storage.googleapis.com/zenn-user-upload/li3qgtsvbnh65x1w5qjum6f298ew" alt="" /></p> <p><strong>Google Driveのマウント</strong></p> <pre><code class="python">from google.colab import drive drive.mount('/content/drive') </code></pre> <p>表示されたURLをクリックしましょう。<br /> <img src="https://storage.googleapis.com/zenn-user-upload/4ipbqwm83adqv1s28obmv8dsdu3x" alt="" /></p> <p>Google アカウントを選択する画面に遷移するので、自分のアカウントをクリックしましょう。<br /> <img src="https://storage.googleapis.com/zenn-user-upload/8s44uahxdgudifcnswv8k5h2wl7h" alt="" /></p> <p>左のフォルダマークをクリックすると、自分のGoogle DriveがColabから見えるようになっているのがわかります。<br /> content > drive > MyDrive 以降のフォルダが自分のGoogle Driveのフォルダになります。<br /> <img src="https://storage.googleapis.com/zenn-user-upload/9gyaq2yj4ygkiqqc297288tar8oh" alt="" /></p> <p><strong>Datalore</strong></p> <p>左上のクリップのアイコンのある Attatched File をクリックし、下の Upload ボタンをクリックするとローカルのデータをアップロードすることが可能です。</p> <p><img src="https://storage.googleapis.com/zenn-user-upload/rhiuzt40dk4wookj98wbqxl0rq1f" alt="" /></p> <h2 id="インストール済みのライブラリ"><a href="#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%B8%88%E3%81%BF%E3%81%AE%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA">インストール済みのライブラリ</a></h2> <p>いくつか最初からインストール済みか試してみましたが、Google Colab のほうがインストール済みのライブラリが多いように感じました。</p> <p>なお、インストールされていないライブラリも、下記のコマンドでインストール可能です。</p> <p><strong>Google Colab</strong></p> <pre><code class="python">!pip install xxx </code></pre> <p><strong>Datalore</strong></p> <pre><code class="python">pip install xxx </code></pre> <p><strong>Google Colab</strong></p> <p><strong>インストール済み</strong><br /> - OpenCV(cv2)<br /> - lightgbm<br /> - librosa<br /> - tensorflow<br /> - keras<br /> - pytorch(torch)</p> <p><strong>インストールされていない</strong><br /> - boto3</p> <p><strong>Datalore</strong></p> <p><strong>インストール済み</strong><br /> - OpenCV(cv2)<br /> - tensorflow<br /> - keras<br /> - pytorch(torch)</p> <p>インストールされていない<br /> - lightgbm<br /> - librosa<br /> - boto3</p> <h2 id="GPU"><a href="#GPU">GPU</a></h2> <p><strong>Google Colab</strong></p> <p>無料版は12時間使用可能。</p> <p><strong>Datalore</strong></p> <p>コミュニティプランはGPU使用不可、メモリは4GBを使用可能です。</p> <p>プロフェッショナルプランはコミュニティプランと同様のメモリ4GBに加え、120時間メモリ 16GBを使用可能、GPU NVIDIA T4(16GB)を20時間使用可能です。</p> <h2 id="コードの共有"><a href="#%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%85%B1%E6%9C%89">コードの共有</a></h2> <p><strong>Google Colab</strong></p> <p>右上の共有ボタンを押してGoogle Colab の共有リンクを作成可能。</p> <p><img src="https://storage.googleapis.com/zenn-user-upload/3yu1e3xy3qsjwgbrtnojghb66jm1" alt="" /></p> <p><strong>Datalore</strong></p> <p>クリックすればだれでもアクセスできる共有リンクは作成できず招待のみのようです。</p> <p>左上のFileタブからShareを選択するか、右上の人型のマークを押すと招待画面がポップアップします。</p> <p><img src="https://storage.googleapis.com/zenn-user-upload/hlepww7newjb5339smy975nb1lp8" alt="" /></p> <p><img src="https://storage.googleapis.com/zenn-user-upload/2b83osrl9bwewhhdjwjx5s4n366p" alt="" /></p> <h2 id="その他"><a href="#%E3%81%9D%E3%81%AE%E4%BB%96">その他</a></h2> <h3 id="ダークモード"><a href="#%E3%83%80%E3%83%BC%E3%82%AF%E3%83%A2%E3%83%BC%E3%83%89">ダークモード</a></h3> <p><strong>Google Colab</strong></p> <ul> <li>右上の歯車マークをクリックして設定画面を開き、サイトのテーマから dark を選択して保存。</li> </ul> <p>なお、通常でもダークモードでもハイライトされます。</p> <p><strong>Datalore</strong></p> <p>左上のView タブから Dark Theme を選択。</p> <p>なお、ダークモードではハイライトされますが、通常はハイライトされないようです。</p> <h3 id="ライブラリのレコメンド"><a href="#%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E3%83%AC%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%89">ライブラリのレコメンド</a></h3> <p>ライブラリを import する前に使用した場合、Google Colab はエラーになるだけですが、DataLore は import するライブラリをレコメンドしてくれます。</p> <p><strong>Google Colab</strong></p> <p>例えば import numpy as np を実行する前に、np.argmax([1,2,3,4])を実行すると、エラー表示になります。</p> <p><img src="https://storage.googleapis.com/zenn-user-upload/oxap6rjje8nzp2tskz1cwzh2f2x3" alt="" /></p> <p><strong>Datalore</strong></p> <p>例えば import numpy as np を実行する前に、np.argmax([1,2,3,4])を実行すると、エラー表示の下に import numpy と表示されます。</p> <p><img src="https://storage.googleapis.com/zenn-user-upload/lqk8c3uy5o6jh3d29ofr1ekaappl" alt="" /></p> <p>これをクリックすると、自動で import numpy as np が挿入されます。</p> <p><img src="https://storage.googleapis.com/zenn-user-upload/lrau2yixrhvhphl6rlsfpr1t1iyw" alt="" /></p> <p>以上になります、最後までお読みいただきありがとうございました。</p> koji/メガネ男