データエンジニアの@masaki925 です。 私が所属するデータ組織では、スタディサプリ本体に対して検索やレコメンドなどのデータプロダクトをマイクロサービスとして提供しており、その多くはPython がメイン言語です。 またデータ基盤としてBigQuery をはじめとしたGCP サービスを多く活用しています。 現在、私は2020年頃から新規プロジェクトに参画しており、そこでもPython とGCP をベースとした開発環境を構築しました。 私が開発環境に求めることは「TDD がしやすいこと」です。 これは平たく言うと、テストを書いて、実装して、CI/CD して、というサイクルを効率的に回すことです。当たり前のことを当たり前にやりたい、ただそれだけです。 今回、以下の環境でそれをやろうとしたらいくつか罠があったので記しておきます。 $ docker compose run poetry-do
この記事はZeals Advent Calendar2020の3日目の記事です。見ていただきありがとうございます! 今回はPipenvの代替やら色々言われているPoetryをDocker上で使用する方法を書いていきます。 また、この記事はほとんど公式ドキュメントやGithubリポジトリのissueを参考にしています。正確な情報を知りたいのであれば、ぜひ公式ドキュメントを読んでみてください。 https://python-poetry.org/ 記事を書いたときの動作環境 MacOS Big Sur 11.0.1 Docker for Mac 2.5.0.1 この記事の流れ 今回はこのような流れで開発していきます。 Poetryのインストール方法 Poetryの設定 Poetryの環境を作成 pyproject.tomlへのパッケージ追加 DockerFileを書く Poetryのインストー
なお、distrolessのイメージは2種類(3通りの名前)がありますが、Python 3.5はバグ修正はせず、セキュリティ修正のみでサポート期限が2020/9/13というステータスなので、本エントリーでは3.7の方のみを扱います。 gcr.io/distroless/python3: Python 3.5.3 gcr.io/distroless/python3-debian9: Python 3.5.3(上のイメージと同一) gcr.io/distroless/python3-debian10: Python 3.7.3 一応サンプル等もありますが、どれも1ファイルで構成されたサンプルスクリプトばかりです。前回のsite-packagesにコピーする方法を軽く試したところうまく動かず、シェルもpipもensurepipもないため、ビルドイメージにすることもできません。いろいろ調べた結果、
BusterとかStretchという名前が見慣れない方もいるかもしれませんが、これはLinuxディストリビューションとしてシェアの大きなDebianのコードネームです。 Debianバージョンが少し古いStretchの方がちょびっとサイズが小さかったりはしますが、まあ実用的にはサポートが長い方がいいですよね。slimを使ってGCCとかのコンパイラを自前でダウンロードしている記事とかもたまに見かける気がしますが、マルチステージビルドであれば、そんなにケチケチしなくていいのと、パッケージダウンロードは逐次処理なので遅く、処理系が入ったイメージのダウンロードの方が高速です。並列で処理されるし、一度イメージをダウンロードしてしまえば、なんどもビルドして試すときに効率が良いです。また、多くのケースでネイティブのライブラリも最初から入っており、ビルドでトラブルに遭遇することはかなり減るでしょう。 Py
はじめに こんにちは。こんばんはかもしれません。爲岡 (ためおか) と申します。 2020年4月から株式会社グロービスにて機械学習エンジニアとして働いています。 グロービスでは機械学習技術を利用したプロジェクトや、データ基盤の運用改善プロジェクトを担当しています。 機械学習技術を利用したシステムには様々なものがあると思いますが、 現状のグロービスにおいては、ユーザのリクエストに対して機械学習を行い、 すぐに結果を返す必要があるようなシステムは扱っておらず、 ある程度の時間をかけて学習、推定した結果を非同期にアプリケーションに連携するシステムのみを扱っています。 ゆえに、今のところは機械学習技術を利用したロジックを書くときに、速さを意識することはあまりありません。 一方で、空いている時間に競技プログラミングをやっていることもあり、 高速なコードについて考えたり、書いたりすることは個人的には好
Introduction to Dockerizing for Production Improve your DevOps skills: learn an iterative process for Dockerizing your code. Get your free ebook Using Alpine can make Python Docker builds 50× slower by Itamar Turner-Trauring Last updated 17 Jan 2025, originally created 29 Jan 2020 When you’re choosing a base image for your Docker image, Alpine Linux is often recommended. Using Alpine, you’re told,
エムスリーエンジニアリンググループ AIチームの笹川です。 バスケと、ロードバイクが趣味なのですが、現在、NBAのplayoffと、Tour de Franceが同時に開催されていて大変嬉しい毎日を過ごしています。 特にNBAのplayoffは、連日overtimeとなるような激戦や、giant killingがあったりのアツい戦いが繰り広げられていて最高です。 そういう状況なので(?)、今回は先日取り組んだ、Pythonの機械学習バッチを実行するdocker imageのサイズ削減についてのアツい戦いについて紹介したいと思います。 膝の上に登って寝る為に、筆者がデスクに戻るのを机の下で待ち構える犬氏(かわいい) 今回の取り組みでは、もともと3GB程度だったPythonのML用のimageを、約2.0GBに削減することができました(それでもなかなかのサイズ。MLのimageは特に大きい印象
AWSを運用しているCloudWatch Logsを分析することが良くあると思います。 数年前はCloudWatch Logsのファイルをダウンロードしてきて、分析していて面倒でしたが、 CloudWatch Logs Insights が出てきてそれもかなり楽になりました。 それでも毎回調べながらクエリを打つのは結構面倒なので、ログ分析基盤としてElasticsearchなどを利用する場合もあると思います。 この記事ではログ分析基盤が無い環境でも、ローカルのElasticsearchに流し込んで簡単に分析できる環境をDockerで整理したので書いていきます。 前提 全体像 リポジトリ 使い方 ダウンロードからのコンテナ起動 Jupyter Lab接続 パラメータ設定 AWS Profile CloudWatch Logs データロード Kibanaで分析 後片付け 前提 Docker d
English version 要約 dockerはデフォルトでセキュリティ機構(Spectre脆弱性の対策)を有効にします。この影響で、RubyやPythonのようなインタプリタは速度が劣化します。特にCPU律速なプログラムで顕著に遅くなります(実行時間が倍くらいになることがあります)。 現象 Rubyで1億回ループするコードを、直接ホスト上で実行する場合と、docker上で実行する場合で実行時間を比較してみます。 直接ホスト上で実行した場合: $ ruby -ve 't = Time.now; i=0;while i<100_000_000;i+=1;end; puts "#{ Time.now - t } sec"' ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux] 1.321703922 sec docker
Intro Pythonで実装した機械学習や画像処理をバックエンドにしたWebアプリをサクッと作るための技術スタックとして、FastAPI+TypeScript+OpenAPIを紹介します。 モチベーション PythonでサクッとWebサーバ(APIサーバ)を立てたい 今まではFlaskを使ってたような用途 「Pythonで」 機械学習・画像処理のサービスなので 「サクッと」 バリデーションとか楽したい サーバ、クライアント共に型の保証が欲しい 機械学習や画像処理のアプリはパラメータが多くなりがち・一貫した慣習が無いのでミスしやすい width or w 値の範囲は[0, w] or [0, 1] ? →型アノテーションでカバーしたい やりたいこと API endpoint公開 メディアファイルアップロード・ダウンロード Additional: 非同期通信、WebSocket 検討した選択
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く