コーディング侍:Pythonで学ぶ機械学習ソフトウェア開発の極意
- 紙の本+電子版¥ 1,800
- ダウンロード版¥ 1,600
- 無料試し読み¥ 0
この本は、機械学習エンジニアのためのソフトウェア開発本です。機械学習といえば、モデル作成や分析の領域で閉じてしまうことが多々ありますが、近年ソフトウェア開発の分野が求められつつあります。しかし、これまで機械学習の分野までやってきた方にはソフトウェア開発の独特の考え方が理解出来できないという課題があります。 この本では、機械学習で馴染み深いPythonをそのまま使い(別のフロントエンドの言語の学習コストがなくなります)、Pythonベースで動く「Gradio」や「Streamlit」といった手軽に作れるフレームワークを使ってWebアプリケーションを作り、機械学習を使ったアプリケーションをケーススタディの形で学んでいきます。また、AWSへのデプロイや、フロントエンドやバックエンドの分離についても学んでいきます、 「戦況を支配する」「複数の敵味方と戦う」「城攻め」といった侍の世界観と対応させて、これらの概念を説明することで、より楽しみつつ学ぶことができるでしょう。
物語
――かつての時代、ある小さな村に礼瑠(れる)という若者がいた。彼は数々の武技を習得してきたが、特に「機械学習」という名の技を習得していた。彼の機械学習の技は、研ぎ澄まされた鋼のように高度に磨き上げたものだった。しかし、単なる技の披露に留まり、それを実際の戦で活用する術を知らなかった。 都の武士に嘲笑れた礼瑠は深いショックを受け、自らの無力さに打ちのめされてしまう。しかし、帰路の途中、赤井部(あかいぶ)先生という山奥に住む老師と出会った。老師はこう語る 「若者よ、落ち込むことはない。おぬしの機械学習の技は、まるで鍛え上げられた刃のように鋭く素晴らしいものだ。しかし、真の戦いでは、その刃をいかに活用し、太刀筋を織り交ぜるかが重要なのだ。おぬしが持っている技術は、実際の戦で活かせるようにアプリケーションと共に進化させていかねばならない。ただ、技を持つだけではなく、その技をどのような形で現わし、敵を制すかを考える心が必要だ。今、おぬしに足りないのはその心のあり方だ。立ち上がり、もう一度挑戦せよ。おぬしの技と太刀筋が一つになる時、真に無敵の侍へと変わることだろう。」 この物語は、機械学習の技だけでなく、それを具体的な形で見せるアプリケーション開発の術も身につけることで、真の侍としての道を歩む礼瑠の成長の軌跡である。
章ごとの内容
各章の技術的な内容について簡単に解説します。 ■ 初陣の心構え:Gradio/Streamlit入門 この章では、ソフトウェアの重要性とPythonベースの開発から始まります。また、GradioとStreamlitのインストールと基本的な使用方法から始めて、Dockerベースでの実行についても触れます。GradioではHello Worldから始めて、画像での応答やアニメーションの例を紹介します。Streamlitでは複数ページのアプリケーションの例を紹介します。また応用例として、Amazon ECRやAWS Cloud9といったAWSのツールを使って、どのようにデプロイするかについても簡単に紹介します。 ■ 戦況を支配するための戦術指南:実践Gradio この章では、Gradioを活用したソフトウェア開発に焦点を当てています。具体的なトピックとしては、機械学習モデルの結合、ステート管理、そしてクロージャーや遅延束縛について述べています。機械学習では、CLIPの応用例であるSigLIPを使った自動装備判定機のほか、RAFTを用いたオプティカルフロー推定を活用し、動画のシーン解析を実戦的なアプリケーションとして紹介しています。 ■ 複数の敵味方と戦うための戦術指南:実践Streamlit この章は、Streamlitを使ったソフトウェア開発について詳細に解説します。具体的なトピックとしては、並列/並行処理、排他制御(ロック・セマフォ)などの並列非同期処理がメインです。また、非同期処理とストリーミングの組み合わせを用いて、ChatGPTの複数のストリーミングをコントロールする応用例を紹介します。OpenAIのAPIキーの準備方法から始め、古文翻訳ツールZenVox、論文自動翻訳アプリである「Instant Codex」をアプリケーションを開発します。 ■ 城攻めの極意:Gradio-Lite/Stliteを使ったHTMLアプリや応用例 ここではGradio-LiteとStliteを用いた、HTMLアプリや応用例を詳細に解説しています。どちらのライブラリもWebAssembly(WASM)ベースで、Pythonの実行環境がなくてもPythonのライブラリを活用することができます。具体的なアプリケーションとしては、Gradio-Liteを使った画像処理、Stliteを使った地図上でのデータの可視化を紹介します。単純なHTMLベースでのWebアプリケーションながら、データベースなしでテーブルをJOINをすることが可能です。2024年7月現在、AWS App RunnerではWebSocketは使えないため、Streamlitのアプリは動作しませんが、nginxとStliteを組み合わせることで、App Runner上でのStreamlitのアプリが動作するようになります。nginxのルーティングについても簡単に解説します。 ■ 前線と後方支援を分離した戦略的な城攻め:フロントとバックエンドの分離とAWSへのデプロイ この章では、フロントエンドとバックエンドの分離や、それを意識したAWSへのデプロイ方法について詳しく解説しています。docker-composeを通じた複数のマイクロサービスのローカル開発から、AWSへのデプロイまでの一連の流れを体感することができます。AWSの様々なサービス、具体的にはLambda、App Runner、SageMaker非同期推論を利用します。本章ではCPUバックエンドとGPUバックエンドの両方について解説し、非同期エンドポイントに対する扱い方(ポーリング、Exponential Backoff、オートスケーリング)についても扱っています。
リポジトリ
https://github.com/koshian2/coding-samurai
紙の本
A4 176P モノクロ 紙の本+電子版の場合は、電子版は「おまけファイル」からダウンロードしてください
目次
◯1章:初陣の心構え:Gradio/Streamlit入門 戦場の実態:なぜソフトウェアなのか / 流派:Pythonベースの理由 / 秘伝書:本書のリポジトリ / 装備調達:Gradioのインストール / 初陣:Hello, Young Warrior / 装備調達:Streamlitのインストール / 複数の戦場での初陣:Hello, Samurai / 籠城戦:GradioのDocker化 / 城の図書館:Amazon ECR(Elastic Container Registry) / 遠隔操作が可能な陣地:AWS Cloud9 / 出兵:AWS App Runnerにデプロイする ◯2章:戦況を支配するための戦術指南:実践Gradio 戦術指南:Gradioを使ったソフトウェア開発 / 刀鎧馬を己のものとせよ:機械学習モデルの結合 / 戦況を見極めよ:ステート管理できますか? / 戦況を一元的に把握する:Pydanticを使ったステート管理 / 戦術と装備を切り離して考える:侍顔合わせ / 動きを読み取る剣術:EdoFlow Highlighter(ML編) / 幻影術:Gradioで動画を扱う / 戦況を支配せよ:MLと動画処理とアプリを全部融合する ◯3章:複数の敵味方と戦うための戦術指南:実践Streamlit 戦術指南:この章で学ぶ内容 / 秘密の鍵を入手せよ:OpenAIのAPIキーの準備 / 忍者のごとく解読せよ:ZenVoxによる古文翻訳 / 絵巻を切り開く:Streamlitで簡単なアニメーション / 複数の侍で戦うための掟:並列/並行処理 / 複数の敵と戦う誓い:並行処理とスレッドセーフ / 難所がどこにあるか見極めよ:CPUバウンド、I/Oバウンド / 生々流転な戦場を個として戦う:非同期処理とストリーミングの組み合わせ(Instant Codex) / 同時に戦う数を減らす作戦:排他制御(ロック・セマフォ) / 譲り合いの精神:ローカルLLMを読み込む際の排他制御の実践 ◯4章:城攻めの極意:Gradio-Lite/Stliteを使ったHTMLアプリや応用例 どんな城攻めも対応できる兵器:Gradio-LiteとStliteの概要 / 絵巻解読:Gradio-Liteを使った画像処理 / 万能ゆえの限界:Gradio-Liteの限界 / 城攻めの軍師:GPT-4VをGradio-Liteで実行する / どの地域を攻略すべきか:Stliteを使って石高マップを作る / 攻城の戦略立案:Stliteでの地図を使った可視化 / 一夜城を建てる:nginxによるDocker化 / 秘密の策略で城壁を突破する:Streamlit(Stlite)をAWS App Runnerで動かす方法 / 無人の荒野に拠点を建てる:GitHub PagesでStliteのアプリを公開する / 合言葉を設定する:GradioとStreamlitでパスワード認証を設定する ◯5章:前線と後方支援を分離した戦略的な城攻め:フロントとバックエンドの分離とAWSへのデプロイ 前線と後方支援:フロントエンドとバックエンドの分離 / 忍者の力:AWS Lambdaを使う / 忍者を後方支援した城攻め:App Runner+LambdaでのCPUバックエンドの構成 / 忍者部隊の結成:バックエンドのLambdaを作る / 前線と合流せよ:フロントエンドをローカルLambdaと結合する / 忍者と連動した攻城戦:Sengoku Equip InsightをAWSにデプロイする / 大砲を活用した攻城戦:App Runner+SageMaker非同期推論でのGPUバックエンドの構成 / 実戦配備ために考慮すべきこと:SageMaker非同期推論を使うための準備 / 自陣での大砲演習:GPUのエンドポイントをローカルで動かす / 大砲の実戦配備:SageMaker非同期推論のエンドポイントのデプロイ / 勝利の戦術へ:アプリとして完成させる / リソースの削除
Buyee経由の注文に注意
ブラウザの言語環境が「日本語以外」で「物理本を含む」場合、「Buyee」経由の注文となることがあります。 これは海外発送代行サービスであり、日本在住の方は使う必要はありません。日本在住の方は「日本語のページ」から、ネコポスなどで発送するようにしてください。 Buyee経由ではBoothの注文履歴に反映されないため、おまけの電子版がダウンロードできません。
アップデート履歴
・11/27 とりあえず公開