タグ

ブックマーク / zenn.dev/tellernovel_inc (17)

  • Dev ContainerテンプレートでPython+GPU環境を爆速立ち上げ

    テラーノベルで機械学習を担当している川尻です。 私たちの機械学習プロジェクトでは、VSCodeのDevelopment Containers (以下、dev container)を使用しています。dev containerでは、開発に必要なツールを事前にイメージに格納し、開発はコンテナ内で行います。一度設定を完了すれば、チーム全体で環境を共有でき、大変便利です。VSCodeだけでなく、Jetbrains系のIDEやクラウド上でのリモート開発もサポートされています[1]。 Developing inside a Container より引用 しかし、設定項目が増えてくると、新規プロジェクトを立ち上げるたびに、毎回同様の設定をコピーしなければならず、めんどくさいです。そんなときdev containerには、カスタムでテンプレートを作成して簡単に公開する方法が用意されています。この記事では具体

    Dev ContainerテンプレートでPython+GPU環境を爆速立ち上げ
  • Mercari Dataflow Templateの紹介

    テラーノベルで機械学習を担当している川尻です。テラーノベルで定期実行タスクの管理には、Google CloudのマネージドサービスであるCloud Composerを活用しています。以前にもテラーノベルのテックブログで他のサービスと比較して紹介しています。 定期実行タスクの中で典型的な処理の一つとして、BigQueryで処理した結果をGoogle Cloud StorageやCloud Spannerに書き出すというものが挙げられます。そういった処理のとき、Mercari Dataflow Templateが便利なので紹介します。また、最後にComposerから使うときのTipsをまとめました。 Dataflowのつらいところ Dataflow[1] というのは、Google Cloudのフルマネージドでサーバーレスなデータ処理サービスです。処理のパイプラインは、Apache Beam[2

    Mercari Dataflow Templateの紹介
  • GAE スタンダード環境からCloud Runへの移行

    こんにちは、テラーノベルでサーバーサイドを担当している@manikaです。 GAEスタンダード環境からCloud Runへ移行についての備忘録を記事にしました。 GAEからCloud Runへ移行が完了すると、試算ですが現状の4分の1程度にインスタンス料金を抑えれる見込みの為それならばやるしかないな、という事で進めています。 概要 基的にはGAEに依存した機能やパッケージを削除又は変更していくという作業になりますが、Cloud Runへ移行するまでの間GAEでも動作させる必要があり、コードの2重管理は避けたかったのでGAEでもCloud Runでも同じコードで動くよう改修を行なっていく必要もありました。いくつかピックアップして注意点等を記載します。 GAE依存の環境変数の廃止 GAEの環境変数を使用している箇所をCloud Runの環境変数へ置き換えていきました。 また、一部の情報は環境

    GAE スタンダード環境からCloud Runへの移行
  • Pydanticを使ったLLMのプロンプトテクニック

    テラーノベルで機械学習を担当している川尻です。最近、LLMを使った社内業務の自動化などを行っていて、Pydanticを使ったテクニックが良かったので紹介します。 概要 OpenAIの最新のモデルの gpt-4-1106-preview と gpt-3.5-turbo-1106 でJSON Modeがサポートされました(2023/12/27現在)[1]。 これにより出力結果を後段タスクのプログラムで扱いやすくなります。Pydantic [2] というのは、Pythonのデータバリデーションライブラリで、型情報を強力に扱うことができて高速に動きます。最初はPydanticを出力結果のパースにだけ使うつもりでしたが、Pydanticを使うとJSON Schema[3] を出力できることを思い出し、そのまま出力形式を指定するためにプロンプトに入れるといいのではと気が付きました。その結果、OpenA

    Pydanticを使ったLLMのプロンプトテクニック
  • 大規模小説データをOpenAI Embedding APIで特徴抽出してUMAPで可視化してみた

    テラーノベルで機械学習を中心に担当している川尻です。みなさんも大量のデータを特徴抽出してみたけど、どう使ったらいいかわからないなぁということありますよね。とりあえずどういうデータなのか雰囲気だけでもみるために、簡単な可視化から入るかと思います。以前にもグラフデータの可視化について記事を書きました。 テラーノベルでは小説投稿アプリを作っており、OpenAI Embedding APIを使って全作品の特徴量を出しているデータベースがあります。今回はこのデータを例にして、UMAPという可視化に便利な次元削減手法の使い方を紹介します。 UMAPとは UMAPというのは非線形の次元削減手法で、特徴は次元数やデータ量に対してほとんど一定の計算時間で済むということです。LLMなどの事前学習モデルでよく扱うような1,000次元を超えるような特徴量でも全く問題なく動きます。さらに、Pythonでとても使いや

    大規模小説データをOpenAI Embedding APIで特徴抽出してUMAPで可視化してみた
  • 【Cloud Run】ElasticsearchをCloud Runで運用する

    はじめに こんにちは! テラーノベルでサーバーサイドを担当している@yuhasです。 テラーノベルには作品や作家さんの検索機能があり、ユーザーさんの読みたい作品や興味のある作家さんを提示できる検索機能は重要な機能の一つです。 直近でその検索まわりを一新することになり、Cloud RunでElasticsearchを運用することになりました。 Cloud Runで運用することでオートスケールなど多くの恩恵を受けられる一方で、状態をもつElasticsearchをコンテナで動かしていくのは単純なことではありません。 今回はどのようにしてCloud RunでElasticsearchを運用しているのかをお話しできればと思います。 モチベーション もともと外部の検索サービス(SaaS)を利用して検索機能を提供していましたが、インフラ面でのコストを下げたいという話があり、代替手段を模索していました。

    【Cloud Run】ElasticsearchをCloud Runで運用する
  • Pandocでマークダウンから綺麗な電子書籍(EPUB)を作成する為のTips 5選

    こんにちは、テラーノベルでサーバーサイドを担当している@manikaです。 今回はOSSのドキュメント変換ツールであるPandocを触る機会があったので、検証等を行った際の備忘も兼ねてマークダウンを電子書籍化するTipsを記事としました。 先に結論 良い感じに仕上がりました。 ブックアプリ Kindle Previewer 3 出典[1] 既にPandocを使った基的な変換方法とかは知ってるよ!という方はこちらに飛んでください。 Pandocとは 様々な形式のファイルフォーマットのドキュメントを別のフォーマットに変換してくれるOSSツールです。今回使用するMarkdownやEPUBをはじめ、HTML、LaTexPDF、Word(docx)、OpenOffice(odt)、CSV等、対応フォーマットは多様です。 開発環境 MacBook Pro(M1) pandoc/core:lates

    Pandocでマークダウンから綺麗な電子書籍(EPUB)を作成する為のTips 5選
  • Poetryを使ったPythonのモノレポ構成

    テラーノベルで機械学習を中心に担当している川尻です。 最近新たにPythonプロジェクトを立ち上げるときにモノレポ構成にしました。Pythonにはまだデファクトとなるようなモノレポのツールはないですが、poetryだけで新しいツールを使わずに対応できたのでご紹介します。 モノリポにするメリットは、大まかには以下のようになります。 Linter, CI, IDEなどのよく使うツールの設定が簡単に共通化できる。 モジュール間の依存関係をシンプルにできる。 Pythonでモノレポをやっている例を検索すると、pantsやbazelなど多言語に対応した専用のツールを使う方法もでてきました。今回は言語はPythonだけでよく、新しい書き方を覚えるのも大変なのでpoetryだけてやる方法としました。 参考に以下のリポジトリにコードを上げました。 ファイル構成 大まかなファイル構成は以下のようになります

    Poetryを使ったPythonのモノレポ構成
  • Tiptapでオリジナルエディタをつくろう!

    こんにちは!テラーノベルでiOS/Android/Webとフロントエンド周りを担当している @kazutoyoです! 今回はHeadless Editor FrameworkであるTiptapのご紹介と、そちらを使ってオリジナルなエディタを作成しようと思います。 Tiptapとは TiptapはHeadless Editor Frameworkと呼ばれています。 これまでWebでのWYSIWYGエディタとしてQuill.jsやDraft.jsなどが存在しました。 これらは文字の装飾や文章の編集に関するUIをデフォルトで提供しており、エディタに特別な機能を追加しようとしたり、UIを大きく変えるというのは少々大変でした。 TiptapのようなHeadless Editor Frameworkは、エディタで必要な機能のコア機能を提供し、必要なUIや機能は拡張機能として追加できるような仕組みになっ

    Tiptapでオリジナルエディタをつくろう!
  • BigQueryリモート関数で機械学習モデルを動かす

    テラーノベルで機械学習を中心に担当している川尻です。 テラーノベルでは、定期バッチ処理は主にBigQueryかDataflowを組み合わせて実行しています。データはBigQueryのテーブルにほとんど保存されているため、基的にはBigQueryで完結させたいです。しかし、自作した機械学習モデルは前処理も含めてpythonで書く必要があるため、そこだけDataflowを使っていました。最近、BigQueryリモート関数を使ってみたところ、意外と簡単にBigQueryだけでシンプルに完結させることができました。今回は、機械学習モデルをBigQueryから実行したときのちょっとしたハマりどころや、実際にどれくらいコストや処理時間がかかったのか紹介します。 BigQueryリモート関数とは BigQueryリモート関数は、好きな言語やフレームワークでCloud FunctionsやCloud R

    BigQueryリモート関数で機械学習モデルを動かす
  • 大規模グラフデータの可視化:Cosmographの紹介

    テラーノベルで機械学習を中心に担当している川尻です。最近、グラフニューラルネットワーク(GNN)に注目しており、サーベイや検証をしております。以前にも以下の記事を書きました。 複雑なアルゴリズムを適用する前に、当たりをつけたり、結果を確認したりするためには、可視化が重要です。記事では、いくつかあるグラフの可視化ツールの中でも、大規模なネットワークでも簡単に使えるCosmographを紹介し、テラーノベルのデータを使って可視化してみます。 Cosmographとは グラフデータを可視化するツールはたくさんありますが、もっとも有名なのはgrapgvizです。graphvizにはsfdp[1]という大規模なデータに対応したアルゴリズムが用意されていますが、ノード数が10k以上のような大規模なグラフになると計算時間もかなりかかって、パラメータ調整も大変になります。 Cosmographは、Web

    大規模グラフデータの可視化:Cosmographの紹介
  • GolandからVSCodeへの移行

    こんにちは、テラーノベルでサーバーサイドを担当している@manikaです。 テラーノベルのサーバーチームではGoで開発しており、IDEは主にGolandをメインで使用しています。Golandにはもちろんフォーマッタやリンター、リファクタリング等の基的な機能は備わっており、特に不便もなく(むしろ便利に)使用していました。 ただIDEにありがちなメモリ圧迫や、特によく使用されがちな関数名(Get等)をリファクタリングしようとすると多大な時間がかかり最悪そのままハングして強制終了…という事がそこそこの頻度で起きるのでどうにかしたいなぁという事で、チームメンバーもよく使用しているVSCodeに移行出来ないか?という事で移行が出来そうかを調べてみました。 移行をするにしても開発体験が落ちてしまっては元も子もないので移行にあたってこれは欲しいよねという項目をまとめてみました。 MUST GoのLin

    GolandからVSCodeへの移行
  • 【Cloud Run Jobs】定期実行で排他制御を実現する

    はじめに こんにちは! テラーノベルでサーバーサイドを担当している@yuhasです。 最近は業務でCloud RunやCloud Run Jobsを使うことが多いのですが、その中でCloud Run Jobsの定期実行での排他制御を実現しました。これは色々と工夫が必要なことで、そのやり方を紹介します。 定期実行での排他制御とはつまり、毎分の定期実行を行いつつも、同時に複数の実行が行われないようにするためにはどう制御するか、というような話になります。 Cloud Run JobsとCloud Schedulerについて Cloud Run Jobsはコンテナの実行環境です。コンテナのイメージを渡してあげるだけで簡単に実行することができます。実行間隔や実行時間についてはさまざまな制御を行うことができますが、Cloud Schedulerを利用するのが簡単です。Cloud Run Jobsの「ト

    【Cloud Run Jobs】定期実行で排他制御を実現する
  • SwiftUIでのイージングとSpring Animationはどう使い分ける?最適な方法で心地よいアニメーションを目指そう!

    こんにちは!テラーノベルでiOS/Android/Webとフロントエンド周りを担当している @kazutoyoです! WWDC 2023でのPlatforms State of the Unionで話されていたように、SwiftUIのアニメーションのデフォルトがSpringに変更され、APIもシンプルなものが提供される予定です。 また、SpringアニメーションについてのAnimate with springsを元に、今回はイージングとSpringをつかったアニメーションについてお話します。 アニメーションとイージング アニメーションは、開始から終了までの時間と値の変化で決まります。 この時間変化における値は、利用するイージング関数により変わります。 以下にいくつか代表的なイージングの種類を説明します。 Linear Linear関数は時間に対して等速に変化するイージングです。 Apple

    SwiftUIでのイージングとSpring Animationはどう使い分ける?最適な方法で心地よいアニメーションを目指そう!
  • 【Cloud Spanner】無停止で安全に漸進的にDatastoreからSpannerへの移行を行う

    はじめに こんにちは! テラーノベルでサーバーサイドを担当している@yuhasです。 私は2023年3月にテラーノベルにJOINいたしまして、最初のタスクの中で、GCPのDatastoreからSpannerへの一部テーブル移行を行いました。その移行は過渡期にあり、その中の一部を担当したという感じになります。 (ここでは詳細は省略しますが)サーバーサイドで使用しているGo言語をバージョンアップするとタイムアウトが頻出してしまう問題があり、その原因がDatastoreの一部テーブルへの大量の読み込みにありそうということを突き止めました。そこで、(Spanner移行が全体の方向性であったこともあり、)そのDataStoreテーブルを優先的にSpannerへ移行しようということになりました。 私自身としては、もうすでに移行作業が行われてきたものに沿ったという形にはなりますが、Datastoreから

    【Cloud Spanner】無停止で安全に漸進的にDatastoreからSpannerへの移行を行う
  • GraphQL(gqlgen) の directive で事前条件、事後条件を実装する

    こんにちは。久しぶりに趣味でタイピングゲームに関するライブラリを開発している typer です。 テラーノベルでも遅まきながらバックエンド APIGraphQL に移行することになったので、GraphQL の表現力を活かしてドメインの関心事をスキーマに落とし込むことに四苦八苦している毎日です。今回は、こんな directive 作ってみたら解決したい問題にジャストフィットしたよ、というのを紹介していきます。 GraphQL 移行開始 2023年春現在、テラーノベルではバックエンド API を protocol buffer (protobuf) で定義しています。protobuf = gRPC みたいなイメージがありますが、Google App Engine(GAE) が gRPC 通信に非対応だったことやランタイムの Go のバージョンが低かったこともあって、twirp というフレ

    GraphQL(gqlgen) の directive で事前条件、事後条件を実装する
  • グラフニューラルネットワーク(GNN)を使ったタグ分類

    テラーノベルで機械学習を中心に担当している川尻です。最近、グラフニューラルネットワーク(GNN)に注目してサーベイしています。今回は、実際のテラーノベルのデータを簡単なモデルに適用してみたので報告します。 グラフニューラルネットワーク (GNN) グラフニューラルネットワーク(GNN)とは、グラフ理論において対象を「ノード」と「エッジ」からなる「グラフ」として扱うためのニューラルネットワークの一種です。例えば、テラーノベルにおいては、ノードがユーザーや作品の一つ一つを表し、エッジが「読んだ」「いいね」「フォロー」などを表します。ディープラーニングの発展に伴い、GNNの研究も盛んになっており、大規模なデータや様々なタスクに適用されるようになっています[1]。 テラーノベルでのグラフの例 arxivで投稿された年ごとの「Graph Neural Network」がタイトルに含まれている件数 G

    グラフニューラルネットワーク(GNN)を使ったタグ分類
    ryoma_robo
    ryoma_robo 2023/06/02
    [[graph neural network]‌][Deep Learning][ai][AI][DL]テラーノベルで初めて書いたテックブログ
  • 1