Upgrade to Pro — share decks privately, control downloads, hide ads and more …

gokartで動かすバッチのコストと実行時間の両立戦略 / Strategies for balancing cost and execution time for batches run by gokart

gokartで動かすバッチのコストと実行時間の両立戦略 / Strategies for balancing cost and execution time for batches run by gokart

■イベント :【Sansan×エムスリー】gokartで爆速開発!MLOps勉強会
https://sansan.connpass.com/event/288525/

■登壇概要
タイトル:gokartで動かすバッチのコストと実行時間の両立戦略
発表者: 技術本部 研究開発部 研究員 新井 和弥

◉ 研究開発職 採用情報
募集中のポジションや関連記事など
https://media.sansan-engineering.com/

◉ Sansan Tech Blog
Sansanのものづくりを支えるメンバーのテックブログ(R&Dメンバーの連載も多数)

https://buildersbox.corp-sansan.com/

Sansan R&D

July 12, 2023
Tweet

More Decks by Sansan R&D

Other Decks in Technology

Transcript

  1. Sansan株式会社
    部署 名前
    gokartで動かすバッチの
    コストと実⾏時間の両⽴戦略
    Sansan技術本部
    Sansan技術本部
    技術本部 研究開発部 Architectグループ
    新井和弥

    View Slide

  2. 写真が入ります
    新井 和弥
    Sansan株式会社
    技術本部 研究開発部 Architectグループ エンジニア
    前職ではデータエンジニアとしてB2B SaaS企業のABMプラット
    フォームプロダクトの開発に従事。2022年Sansan株式会社入社。
    研究開発部Architectグループ ML Platform所属。研究員とともに
    DevOps/MLOpsに向き合う。チームの生産性を大事にしている。
    中部支社勤務。
    Please call me KAZY.

    View Slide

  3. 研究開発部内のアプリケーション基盤(K8s)で
    gokartをどう運⽤しているかについて話します。
    本⽇のテーマ
    2

    View Slide

  4. 研究開発部のアプリケーション基盤
    “Circuit”

    View Slide

  5. Circuitって何?
    - 研究開発部のアプリケーション基盤
    > 2022/05頃に誕生
    > Kubernetes(AWS EKS)
    > 合計50くらいのアプリやバッチが動く
    - gokartも15個ほど稼働中
    > 某氏も大絶賛なネーミング
    詳細な紹介はこちら
    https://speakerdeck.com/sansan_randd/about-circuit-r-and-ds-
    application-platform
    おしゃれ、すごい、感動

    View Slide

  6. 課題

    View Slide

  7. 速い、安い、うまい
    - EC2インスタンスのコストを下げたい
    > 15個ほどのgokartが定期的に走る
    > 大きいものだとx1e.16xlargeのインスタンスが動く(≒19USD/時間)
    - 実行時間はなるべく短くしたい
    💸
    https://aws.amazon.com/jp/ec2/pricing/on-demand/

    View Slide

  8. Timepointを利⽤した
    コスト削減と実⾏時間の両⽴戦略

    View Slide

  9. Spot Instance x Dynamic workspace dir
    - スポットインスタンスを使う
    > 安い
    - gokartのworkspace_directoryでキャッシュ
    > S3に置いて中断リスクの緩和
    > 実行時間の増加を最小限にする
    - 動的にworkspace_directoryを変更
    > 定期実行時は毎回新しいworkspace_directory
    > Timepointと呼んでいる ConfigMapで実現
    https://github.com/kubernetes/community/tree/master/icons

    View Slide

  10. Timepointの実装

    View Slide

  11. CronWorkflowで定期ConfigMap更新
    - CronWorkflowで定期的にConfigMapの更新
    > ConfigMapの作成・更新権限を付与
    - ConfigMap取得した値を元に環境変数設定
    - 環境変数経由でworkspace_directoryを設定
    - 実現
    > 定期実行時→新しいworkspace_direcotry
    > スポットインスタンス中断/一時エラー→既存の
    workspace_direcotry
    ConfigMapで実現
    https://argoproj.github.io/workflows/

    View Slide

  12. CronWorkflowで定期ConfigMap更新
    - 定期的にConfigMapを更新するマニフェスト
    apiVersion: argoproj.io/v1alpha1
    kind: CronWorkflow
    metadata:
    name: timepoint
    spec:
    schedule: "0 0 * * mon"
    timezone: Asia/Tokyo
    workflowSpec:
    entrypoint: main
    templates:
    - name: main
    resource:
    action: apply
    manifest: |
    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: batch-timepoint
    data:
    timepoint: '{{=sprig.dateInZone("2006-01-02", sprig.now(), "Asia/Tokyo")}}'

    View Slide

  13. CronWorkflowで定期ConfigMap更新
    - CronWorkflowがConfigMapを作成、更新できるRole
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
    name: timepoint
    rules:
    - apiGroups:
    - ""
    resources:
    - configmaps
    verbs:
    - create
    - get
    - patch

    View Slide

  14. - Timepointにより動的に環境変数を設定するCronJob
    apiVersion: batch/v1
    kind: CronJob
    metadata:
    name: hoge-batch
    spec:
    schedule: "0 0 * * mon"
    jobTemplate:
    spec:
    template:
    spec:
    containers:
    - name: batch
    image: 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/batch
    env:
    - name: TIMEPOINT
    valueFrom:
    configMapKeyRef:
    name: timepoint
    key: timepoint
    - name: WORKSPACE_DIRECTORY
    value: s3://workspaces_dirctory/hoge-batch/$(TIMEPOINT)
    CronWorkflowで定期ConfigMap更新

    View Slide

  15. 結果

    View Slide

  16. 速い、安い、うまいになった
    - キャッシュがあるので
    速い
    - スポットインスタンスで
    安い
    - いい感じなworkspace_directory更新で
    うまい
    🎉

    View Slide

  17. WE ARE
    HIRING
    JOIN OUR TEAM
    https://media.sansan-engineering.com/randd
    https://open.talentio.com/r/1/c/sansan/pages/76616

    View Slide

  18. View Slide