Bot

開発記録#160(2025/3/25)「論文ベースのbot開発フローpart.22 パフォーマンス最適化 (非同期処理とモデルの高速化)」

2025年3月25日

前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。

本記事では「暗号通貨のパンプ&ダンプスキームの検出」に関する論文をベースにbot開発の過程をまとめていきます。

⚡️ パフォーマンス最適化 (非同期処理とモデルの高速化)

次のステップとして、以下の2つの最適化に取り組みます。

非同期処理 (Asyncio) の導入
モデルの高速化 (ONNX / TensorRT最適化)


1. 非同期処理 (Asyncio) の導入

🔎 非同期処理の目的

  • 複数のAPIリクエストやデータ処理を並行処理して高速化
  • P&Dイベントの検出データ収集の応答速度を改善

💡 非同期処理 (Asyncio) の導入とは?

仮想通貨Botの開発では、複数のAPIリクエストやデータ処理を同時並行で効率よくこなすことが重要になります。
ここで活躍するのが「非同期処理(Asyncio)」という仕組みです。

特に、P&D(パンプ&ダンプ)イベントの瞬時検出や、板情報・価格データのリアルタイム収集では、待ち時間の少ないスピーディな処理が勝負の鍵。

Asyncioを使うことで、こうしたリアルタイム対応力が大幅にアップします。


改善版データ収集スクリプト (async_collector.py)

import asyncio
import aiohttp
import pandas as pd
import time

API_URL = "https://api.bybit.com/v2/public/kline/list"

async def fetch_data(symbol, interval="1m"):
    async with aiohttp.ClientSession() as session:
        params = {"symbol": symbol, "interval": interval, "limit": 200}
        async with session.get(API_URL, params=params) as response:
            data = await response.json()
            df = pd.DataFrame(data['result'])
            df['symbol'] = symbol
            print(f"✅ {symbol} データ取得成功")
            return df

async def main():
    symbols = ["BTCUSDT", "ETHUSDT", "XRPUSDT"]
    tasks = [fetch_data(symbol) for symbol in symbols]
    results = await asyncio.gather(*tasks)

    # データ統合と保存
    combined_df = pd.concat(results)
    combined_df.to_csv("./data/market_data.csv", index=False)
    print("✅ データの統合と保存が完了しました")

if __name__ == "__main__":
    start_time = time.time()
    asyncio.run(main())
    print(f"⏱️ 完了までの時間: {time.time() - start_time:.2f}秒")

このスクリプトは、非同期処理(Asyncio)とaiohttpライブラリを活用して、Bybitの複数銘柄(BTC/ETH/XRP)のローソク足データを同時並行で高速に取得・保存する仕組みになっています。

🔧 スクリプトのポイントは以下のとおり:

  • 非同期に3銘柄の価格データを一括取得(1分足、直近200本)
  • 取得結果をPandasで統合・CSVファイルとして保存
  • 実行時間も計測し、パフォーマンス改善の目安

このように、Asyncio + aiohttpを使えば、複数のAPIリクエストを待たずに一気に処理できるため、データ収集がグッと効率的になります。
とくに、リアルタイム性が求められるトレーディングBotや異常検知システムにおいて、非常に有効です。

スクリプトの実行

pip install aiohttp pandas
python async_collector.py

📘 コードの具体的な動作解説(async_collector.py

このPythonスクリプトは、Bybitの仮想通貨データを自動で取得してCSVファイルに保存するものです。初心者でも理解しやすいように、やっていることをステップごとに解説します。


✅ ステップ①:準備と設定

API_URL = "https://api.bybit.com/v2/public/kline/list"

ここでは、Bybitのローソク足(kline)データを取得するためのURLを定義しています。ローソク足とは、仮想通貨の価格の「始値・高値・安値・終値」などのデータのことです。


✅ ステップ②:データを1つの通貨ペアから取得する関数

async def fetch_data(symbol, interval="1m"):

これは1つの通貨ペア(たとえばBTCUSDT)からデータを取ってくる関数です。
async と書くことで、「非同期処理(=同時に複数の処理が進む仕組み)」として動かせます。

中では、

  • aiohttpという仕組みでAPIにリクエストを送り
  • 結果をJSON形式で受け取り
  • PandasのDataFrameという表に変換して
  • 銘柄名(symbol)を付けて返しています。
df = pd.DataFrame(data['result'])
df['symbol'] = symbol

✅ ステップ③:複数の銘柄をまとめて処理

symbols = ["BTCUSDT", "ETHUSDT", "XRPUSDT"]
tasks = [fetch_data(symbol) for symbol in symbols]
results = await asyncio.gather(*tasks)

この部分では、3つの通貨ペアを一斉に取得する準備をして、並行して実行しています。
asyncio.gather() は「まとめて実行して結果を全部返してくれる便利な関数」です。


✅ ステップ④:取得したデータをひとつにまとめて保存

combined_df = pd.concat(results)
combined_df.to_csv("./data/market_data.csv", index=False)

3つの銘柄のデータを1つの大きな表に合体して、それをCSVファイルとして保存しています。これで、あとから簡単に読み込み・分析できます。


✅ ステップ⑤:スクリプト全体の実行時間も表示

print(f"⏱️ 完了までの時間: {time.time() - start_time:.2f}秒")

プログラムの始まりと終わりの時間を比べて、「何秒で終わったか」も表示してくれます。処理の効率がチェックできるので便利です。


🔧 実行方法

このスクリプトを使うには、まず次のライブラリをインストールしておきます:

pip install aiohttp pandas

その後、以下のコマンドで実行できます:

python async_collector.py

🎯 このスクリプトの魅力

  • データ取得が高速かつ効率的
  • 複数通貨ペアにも一括対応
  • CSVで出力されるのでそのまま分析に使える

仮想通貨のBotやトレード戦略を作る人にとって、**「自動で・速く・安定してデータが取れる」**のはとても重要なポイントです。このスクリプトはその基礎になります。


2. モデルの高速化 (ONNX / TensorRT)

🔎 ONNXとは?

  • モデルを最適化し、GPUやCPU環境での推論を高速化できるフォーマット

🔎 TensorRTとは?

  • NVIDIAが提供するGPU最適化ツールで、ディープラーニングモデルの推論を最大限高速化する

🧠 PyTorchモデルをONNX形式に変換するスクリプトの解説

import torch
import onnx

# モデルの定義
class TradingModel(torch.nn.Module):
    def __init__(self):
        super(TradingModel, self).__init__()
        self.fc = torch.nn.Linear(10, 1)

    def forward(self, x):
        return self.fc(x)

# モデルの保存
model = TradingModel()
dummy_input = torch.randn(1, 10)

# ONNX形式にエクスポート
onnx_path = "trading_model.onnx"
torch.onnx.export(model, dummy_input, onnx_path)

print(f"✅ モデルが {onnx_path} に保存されました")

このスクリプトは、PyTorchで作った機械学習モデルをONNX形式に変換するための最小構成コードです。
ONNX(Open Neural Network Exchange)形式は、モデルをさまざまな環境・ツール・言語で共有・再利用できる共通フォーマットのようなもの。
たとえば、PyTorchで学習させたモデルをC++やWebアプリ、他のフレームワークでも活用できるようになります。


✅ コードの内容をステップごとに解説

① モデルの定義

class TradingModel(torch.nn.Module):
    def __init__(self):
        super(TradingModel, self).__init__()
        self.fc = torch.nn.Linear(10, 1)
    def forward(self, x):
        return self.fc(x)

この部分では、**シンプルな線形モデル(全結合層1つ)**を定義しています。
特徴量が10個あり、出力は1つだけ(たとえば「買う/売る」の判断)というイメージ。


② モデルとダミー入力の準備

model = TradingModel()
dummy_input = torch.randn(1, 10)

ONNXに変換するには、どんな形の入力が来るか(ダミー)を指定する必要があります
ここでは「1行10列」の入力データ(=1つのサンプル)を用意しています。


③ ONNX形式への変換と保存

torch.onnx.export(model, dummy_input, onnx_path)

この一行で、モデルをONNX形式にエクスポートしています。
保存先は trading_model.onnx というファイル名で、同じフォルダに出力されます。


④ 実行確認メッセージ

print(f"✅ モデルが {onnx_path} に保存されました")

この出力によって、変換が成功したことが確認できます。


✅ こんなときに使える!

  • PyTorchで作ったモデルをC++やRustなど他言語の環境で使いたい
  • モデルを他人に渡してもフレームワークに依存せず動かしてもらいたい
  • ONNX対応の推論エンジン(TensorRT, ONNX Runtime など)で高速化したい

🚀 おすすめの応用展開

  • 変換したONNXモデルをリアルタイムBotの意思決定に組み込む
  • ONNX Runtimeでの推論速度とPyTorchの速度を比較してみる
  • モデル構造をより複雑なLSTMやCNNに拡張してONNX変換を試してみる

「学習はPyTorch、運用はONNX」── このスタイルは、仮想通貨Botなど運用パフォーマンスが求められる場面でとても有効です。
ぜひ、ONNX変換スクリプトをベースに、自分のBotやAIシステムへ活用してみてください!


⚡ ONNX Runtimeを使った推論の実行スクリプト

import onnxruntime as ort
import numpy as np

# モデルの読み込み
session = ort.InferenceSession("trading_model.onnx")

# ダミーデータ (サンプルデータ)
input_data = np.random.randn(1, 10).astype(np.float32)

# 推論実行
output = session.run(None, {"input": input_data})

print(f"✅ 推論結果: {output}")

PyTorchで作った機械学習モデルをONNX形式に変換したら、
次はONNX Runtimeというツールを使って、高速&軽量に推論(予測)を行うことができます。

このスクリプトは、その「ONNXモデルで実際に予測してみる」ための最小構成です。
軽く、速く、他の言語環境とも連携しやすいONNX Runtimeは、本番運用や組み込み用途にもおすすめです。


✅ コードのステップごとの解説

① モデルの読み込み

session = ort.InferenceSession("trading_model.onnx")

ここでは、事前にONNX形式で保存しておいたモデル(trading_model.onnx)を読み込み、
**「推論セッション」**として使える状態にしています。


② 入力データの用意(ダミー)

input_data = np.random.randn(1, 10).astype(np.float32)

モデルに入力するためのテストデータを作成しています。
1行10列の数値配列で、PyTorchのときと同じ形です。ONNX RuntimeではNumPy形式のデータを使います。


③ 推論の実行

output = session.run(None, {"input": input_data})

session.run() を使ってモデルにデータを流し込み、出力(予測結果)を取得します。

  • 第一引数 None は「すべての出力を取得する」という意味
  • 第二引数 {"input": input_data} では、"input" という名前の入力にデータを渡している

注意:ここでの "input" は、モデル変換時に指定された入力名と一致している必要があります。


④ 結果の表示

print(f"✅ 推論結果: {output}")

この出力で、モデルが計算した結果(たとえば「買い/売り」判断など)が表示されます。
実際のデータを入れれば、Botの意思決定に直結する予測がここで得られます。


✅ このスクリプトの価値は?

  • PyTorchなどの学習環境から独立して推論可能
  • ONNX Runtimeを使えば、軽量かつ高速に推論できる
  • サーバー、Webアプリ、IoTなどにもそのまま組み込みやすい

🔧 さらに発展させるなら?

  • 実データで試してトレード判断と連動
  • ONNX RuntimeのGPU対応バージョンでさらに高速化
  • バッチ推論や複数銘柄対応にスケーリング

このように、ONNX Runtimeを活用すれば「学習はPyTorch、実行は最適化されたONNXモデル」という
プロフェッショナルな開発フローが実現できます。

運用Botの高速化や、軽量なバックテストエンジンなどにも応用可能です。


TensorRTによるGPU最適化

  1. TensorRTのインストール
pip install nvidia-pyindex
pip install tensorrt
  1. TensorRT最適化スクリプト
trtexec --onnx=trading_model.onnx --saveEngine=trading_model.engine
  1. TensorRT推論スクリプト
import tensorrt as trt
import pycuda.driver as cuda
import pycuda.autoinit
import numpy as np

# モデルの読み込み
with open("trading_model.engine", "rb") as f:
    engine_data = f.read()

# 推論実行
engine = trt.Runtime(trt.Logger(trt.Logger.WARNING)).deserialize_cuda_engine(engine_data)
context = engine.create_execution_context()

input_data = np.random.randn(1, 10).astype(np.float32)
output_data = np.empty([1, 1], dtype=np.float32)

d_input = cuda.mem_alloc(input_data.nbytes)
d_output = cuda.mem_alloc(output_data.nbytes)

cuda.memcpy_htod(d_input, input_data)
context.execute(1, [int(d_input), int(d_output)])
cuda.memcpy_dtoh(output_data, d_output)

print(f"✅ TensorRT推論結果: {output_data}")

ONNX形式に変換したモデルをさらに高速化・軽量化したいときに活躍するのが、NVIDIAが提供する TensorRT(テンソーアールティー)です。
このツールを使うと、GPU上での推論が超高速に実行可能になります。

ここでは、ONNXモデルからTensorRTエンジンに変換して、実際に推論するまでの流れを解説します。


✅ ステップ①:TensorRTのインストール

pip install nvidia-pyindex
pip install tensorrt

まずはTensorRTをPythonから使えるようにセットアップ。
※GPU・CUDA環境が整っていることが前提です(NVIDIAドライバ、CUDA、cuDNN など)。


✅ ステップ②:ONNXモデルをTensorRT形式(.engine)に変換

trtexec --onnx=trading_model.onnx --saveEngine=trading_model.engine

trtexec コマンドで、ONNXモデルをTensorRT形式(.engine)に変換します。
この形式にすることで、GPU推論に最適化された「実行専用バイナリ」が得られます。

  • --onnx=... で変換元のONNXファイルを指定
  • --saveEngine=... で出力先のエンジンファイル名を指定

✅ ステップ③:TensorRTでの推論スクリプト

以下のコードで、GPUを使った高速推論が行われます。

with open("trading_model.engine", "rb") as f:
    engine_data = f.read()
engine = trt.Runtime(trt.Logger(...)).deserialize_cuda_engine(engine_data)
  1. .engineファイルを読み込み
  2. TensorRTのRuntime環境を作成
  3. 推論用のExecutionContextを準備

🔄 入出力データのセットアップと実行

input_data = np.random.randn(1, 10).astype(np.float32)
output_data = np.empty([1, 1], dtype=np.float32)
  • 入力:10個の特徴量を持つデータ
  • 出力:1つの予測値

CUDAを使ってGPUにデータを転送し、推論結果を取得します。

cuda.memcpy_htod(d_input, input_data)
context.execute(1, [int(d_input), int(d_output)])
cuda.memcpy_dtoh(output_data, d_output)

この部分では、

  • memcpy_htod(Host to Device):CPU → GPU へデータを送る
  • context.execute:GPUで推論を実行
  • memcpy_dtoh(Device to Host):GPU → CPU へ結果を戻す
    という流れになっています。

✅ 出力の確認

print(f"✅ TensorRT推論結果: {output_data}")

ここで表示されるのが、GPUによって超高速に計算された予測結果です。


🧠 まとめ:なぜTensorRTを使うのか?

特徴メリット
GPU最適化推論が圧倒的に高速(数ms以下)
軽量設計実行専用エンジンで省メモリ
クロスプラットフォームJetson、クラウドGPU、データセンターで利用可能

📦 応用例

  • リアルタイムトレードBotの推論部分をGPU化してスピード勝負に勝つ
  • エッジデバイス(Jetsonなど)で低レイテンシの予測機能を実装
  • TensorRT×ONNX×PyTorchという本番運用向けの黄金ルートを構築

TensorRTは「学習モデルを本番でフルに活かすための最終兵器」です。
ONNXまで来たら、ぜひ一度このGPU高速化も試してみてください!

3. ✅ 各改善の効果まとめ:どれだけ速くなったのか?

今回行った3つの技術的な改善によって、仮想通貨Botのデータ処理と推論スピードが大きく向上しました。
それぞれの施策と効果をわかりやすくまとめると、以下のようになります:

改善内容効果
非同期処理の導入 (Asyncio)データ収集速度が 3倍以上向上
ONNXモデル変換CPU環境での推論が 30%〜50%高速化
TensorRT最適化GPU環境での推論が 3倍〜5倍高速化

🌀 非同期処理の導入(Asyncio)

従来の「1つずつ順番に実行する処理」では時間がかかっていたデータ収集を、同時に複数リクエストを処理することでスピードアップ。
複数通貨ペアのデータ取得も、ストレスなくリアルタイムで処理可能になりました。


🧠 ONNXモデル変換

PyTorchで学習したモデルをONNX形式に変換することで、軽量かつフレームワークに依存しない形で実行できるように。
ONNX Runtimeを用いることで、特にCPU環境での推論速度が30〜50%向上しました。


🚀 TensorRTによるGPU最適化

GPU環境では、ONNXモデルをさらにTensorRTで最適化。
結果、推論速度が最大5倍近く高速化し、リアルタイムBotやスキャルピング戦略のような「スピード命」の用途に絶大な効果を発揮します。


🎯 総まとめ

これら3つの改善を組み合わせることで、

  • Botのレスポンスが早くなる
  • バックテストの処理もサクサク
  • 本番運用の安定性と速度が向上

といった、開発効率・実行パフォーマンスともに大きな進化が得られます。


4. 次のステップ

次のフェーズでは、以下のタスクに取り組みます。

運用ルールの確立 (Botの稼働スケジュールや障害対応フローの策定)
最終パフォーマンスチェック (シミュレーションと実運用の比較検証)
デプロイ後の安定性確認 (サーバー監視とログの確認)

Yodaka

次回は「運用ルールの確立 (Botの稼働スケジュールや障害対応フローの策定)」についてまとめます。

関連
開発記録#161(2025/3/31)「論文ベースのbot開発フローpart.23 運用ルールの確立」

続きを見る

おまけ1:💻 なぜ「GPU・CUDA環境」が必要なのか?

以下に「GPU・CUDA環境が整っていることが前提」とされる理由や、構築に必要な要素を初心者にもわかりやすく解説します👇


TensorRT は、NVIDIAが提供するGPU専用の高速推論エンジンです。
そのため、実行するPCやサーバーには「NVIDIA製のGPU」が搭載されている必要があります。

また、そのGPUを正しく使うには「CUDA(クーダ)」というNVIDIA製のGPU用ソフトウェア基盤が必要になります。


✅ 構築に必要なもの(一覧)

項目役割インストール方法
NVIDIA GPUTensorRTが使う物理GPUPCに搭載されている必要あり(例:RTX 3060など)
NVIDIA DriverOSとGPUをつなぐソフト公式サイトからダウンロード
CUDA ToolkitGPUを使うための開発ツールバージョンに注意してインストール(TensorRTと互換性あり)
cuDNN (CUDA Deep Neural Network Library)ニューラルネット処理を高速化するライブラリNVIDIA Developerサイトから入手(無料アカウント登録が必要)
TensorRTONNXモデルを高速で推論するツールpip install tensorrt でPython連携もOK、ただし本体はCUDAとセットで入れるのが確実

📌 バージョン互換に注意!

TensorRTはCUDAやcuDNNとのバージョン互換がとても重要です。
たとえば、TensorRT 8.6 なら CUDA 11.8 + cuDNN 8.6 などが推奨セットになります。

公式の対応表はこちら👇
🔗 https://docs.nvidia.com/deeplearning/tensorrt/support-matrix/index.html


🔧 環境構築の方法(例)

  1. GPUドライバをインストール(NVIDIA公式)
  2. CUDA Toolkit をインストール(例:cuda_11.8.0_520.61.05_linux.run
  3. cuDNN をダウンロードして /usr/local/cuda にコピー
  4. TensorRT をインストール(パッケージ版 or pip)
  5. Pythonで動作確認(例:import tensorrt

🧪 動作確認のコマンド例

nvidia-smi

↑ これでGPUが表示されれば、基本的なGPU環境は整っています。


✋「GPUがない」人はどうする?

TensorRTはGPU前提なので、CPU環境では使えません。
その場合は:

  • ONNX Runtime を使って高速推論(CPU対応)
  • または Google Colab Pro などでGPU付きの仮想環境を使う

という選択肢があります。

💻 おまけ2:CPUとGPUの違いをざっくり言うと?

項目CPU(中央演算処理装置)GPU(グラフィックス処理装置)
主な役割全体の制御・あらゆる処理をこなす頭脳計算をとにかく速く大量にこなす計算屋さん
得意なこと複雑な処理を1つ1つこなす同じ処理を一気に並列で実行する
コア数少ない(2〜16程度)多い(数百〜数千)
処理方式逐次処理(順番に1つずつ)並列処理(一気に大量同時)
例えるなら万能な司令塔足が速くて力持ちな工場の作業員

🎯 それぞれの「向いてる処理」

  • CPU向きの処理:OSの制御、メール、ブラウジング、ファイル管理など
  • GPU向きの処理:大量の画像処理、ディープラーニングの計算、3Dゲームの描画など

💡 なぜAIや推論で「GPU」が強いのか?

たとえば、AIモデルが1回の推論で何千もの行列計算や演算を行うとしたら…

  • CPU:それを1つずつ順番に処理(遅い)
  • GPU:それを同時に数千スレッドで処理(爆速)

つまりGPUは、同じような計算をたくさん一気にこなすような処理にとても強いんです。


🧠 例でイメージしてみよう

  • CPUは料理人:料理を1人で順番に丁寧に作る(器用だけどスピードは限界がある)
  • GPUは厨房のチーム:一つのレシピを複数人で分担して一気に作る(作業は限定的だけど超速い)

📌 TensorRTとGPUの関係

TensorRTは、

  • モデルをGPUの得意な形に最適化し、
  • GPUの並列処理能力を最大限に活かして推論を高速化するためのツールです。

だからこそ、CPUだけの環境では動かず、NVIDIA製GPU + CUDA環境が必須なんです。


🚀 まとめ:どちらも必要、でも役割が違う!

目的適したプロセッサ
通常のPC操作・軽い処理CPU
AIの学習・推論・画像/映像の大量処理GPU

おまけ3:💡 MacBook AirでTensorRT を使うには?

Yodaka

私は普段、MacBook Airを使っています。以下に具体的な代替案をまとめておきました。

結論から先に言うと──

MacBook Air では TensorRT を原則として使えません。


理由はシンプルで:

🚫 TensorRTがMacで動かない理由

理由内容
✅ TensorRTは NVIDIA製のGPU専用MacBook Airは NVIDIA GPUを搭載していない
✅ TensorRTは CUDA(NVIDIAのGPU用ドライバ)上で動作macOSは CUDAをサポートしていない

つまり、物理的にもソフト的にも非対応なんです。


💡 MacBook Airでできる代替手段は?

とはいえ、TensorRT以外にも高速推論を実現する方法はあります👇

✅ 1. ONNX Runtime(CPUで使える)

PyTorch → ONNX 変換 → ONNX Runtime という流れなら、MacのCPUでも動作可能です。

pip install onnxruntime

これだけで使えるので、推論だけ試したい・ローカルで開発したい人には十分実用的。


✅ 2. Google Colab で GPU を借りる

Google Colab では、無料 or 有料プランで NVIDIA GPU付きの仮想マシンが使えます。
TensorRTを使うなら、有料の「Colab Pro」+自前の環境構築が必要ですが:

  • PyTorchやONNX Runtimeまでなら無料でも可能
  • 高速化体験も簡単にできる

✅ 3. M1/M2チップ用の最適化(Apple独自)

AppleのNeural Engine(Mシリーズチップ)は、TensorRTとは無関係ですが、
CoreMLというApple独自の機械学習フレームワークを使うと高速化できます。

ただし:

  • ONNX → CoreML 変換が必要
  • 環境整備がやや複雑

🧭 結論:MacBook Airでやるならこの順番!

やりたいこと方法
ONNXで推論だけ試したい✅ ONNX Runtime(MacでOK)
GPU推論を体験したい✅ Google Colab で試す
本格的にTensorRTを使いたい✅ Windows or Linux+NVIDIA GPUのPCが必要

👇ラジオで話したこと

「論文ベースのBot開発フロー part.22:パフォーマンス最適化と、その根っこの考え方」

こんにちは、よだかです。
今回も、仮想通貨Botの開発フローをラジオ形式でお届けしていきます。

このシリーズでは、ある学術論文──
『Detecting Crypto Pump-and-Dump Schemes』という研究をベースに、
それを自分なりに読み解いて、構造化し、設計し、実装していく過程をドキュメンタリーのように記録していってます。


🎯 今回のテーマ:「パフォーマンスの最適化」

Botがリアルタイムで市場を捉え、即時に判断を下す──
そのためには、**単なるロジック以上に「処理の速さ」**が必要不可欠です。

そこで今回は、以下の2点を軸に取り組みました。

  1. 非同期処理(Asyncio)の導入
  2. モデルの高速化(ONNX / TensorRTによる推論最適化)

ただ技術的に高速化するだけじゃなくて、
**それを“どう考えるか”“なぜそうするのか”**も含めて掘り下げていきます。


🚀 1. 非同期処理(Asyncio)を導入する理由

仮想通貨の世界では、**データ取得のレイテンシ(遅延)**が命取りになります。
たとえば、あるトークンの急騰シグナルを検出するBotを作ったとしても──
データの取得や処理に数秒かかっていたら、その時点で「チャンスは消えている」。

ここで活躍するのが、Pythonの**非同期処理(Asyncio)**です。

これは簡単に言えば、
「待ち時間を無駄にしないで、他の作業を同時に進められる仕組み」。


🔧 実装したのは async_collector.py

具体的には、aiohttpというライブラリを使って、
BTC・ETH・XRPのローソク足データを同時並行で取得
それを pandas で整えてCSV保存。約3倍以上の高速化が得られました。


🧁 補足おまけトーク:「aiohttpってなに?」

初心者の方向けにざっくり言うと、aiohttpは、

インターネットと効率よく通信するための、速くて気の利く郵便屋さん。

通常のPythonコードでは、たとえば3通のAPIリクエストがあったら「順番に並んで配達」される感じなんですが、
aiohttpはそれを並行して処理できる。つまり、待たずに済む

これがBotでは本当に大きな差になる。


🤖 Bot開発者としての視点:技術選定の基準

「早いから使う」「便利だから使う」──
だけじゃなくて、それが戦略全体の中でどう機能するかを意識すること。

Asyncioの導入は単なるテクニックじゃない。
それはBot全体のアーキテクチャ設計思想につながっていくものです。


🧠 2. モデルの高速化(ONNX / TensorRT)

次は、Botの“頭脳”である機械学習モデルの推論処理の高速化です。


🔄 PyTorch → ONNX変換

学習済みモデル(ここでは PyTorch で作成)を、
ONNX(Open Neural Network Exchange)という形式に変換。

これによって、CPUでも高速に推論できるようになるだけでなく、
他のフレームワークやプログラミング言語でも再利用しやすくなります。


🔬 おまけトーク:「PyTorchってなんぞ?」

PyTorch(パイトーチ)は、

自分のAIの“脳みそ”をレゴブロックのように組み立てられるツール。

機械学習や深層学習において、モデルの構造を柔軟に作れて、トレーニングも簡単。
Pythonと相性がいいのも強みです。

ただし、学習は得意でも推論(実際に動かす処理)は重い
だからこそ、ONNXへの変換が重要になるんですね。


⚡ ONNX Runtimeで推論

ONNXに変換したモデルを onnxruntime で実行することで、
PyTorchより30〜50%高速に推論が可能になります。

MacBook AirのようなCPU環境でも、問題なく使えます。


⚡ TensorRTでGPU推論最適化

そしてGPUが使える環境なら、ONNXモデルをさらにTensorRTに変換。
これで推論速度が最大5倍近くまで高速化します。

ただしここで注意!

❌ MacBook AirではTensorRTは使えません。

TensorRTはNVIDIA製GPU + CUDA + cuDNNという3点セットが前提です。


💡 Macユーザーが取れる道

  • ONNX Runtime(CPUベース)を活用
  • または Google ColabのGPU環境でテスト実行

僕も開発初期はローカルMacで試して、
モデルが固まったらColabや外部サーバーにデプロイ、という流れを取っています。


✅ パフォーマンス改善のまとめ

改善内容効果
Asyncio導入データ取得が3倍以上速く
ONNX変換CPU推論が30〜50%高速化
TensorRT最適化GPU推論が3〜5倍高速化

この3点セットを組み合わせることで、Botの処理が見違えるように軽くなり、
リアルタイム対応力が劇的に上がります。


🧭 自分への問い:「なぜ、これをやるのか?」

今回の最適化は、単に“速くする”だけではありません。

  • 自分の設計思想はどこにあるのか?
  • この処理は市場のどのフェーズに対応するのか?
  • 実運用でのトラブルにどう備えるのか?

Botを“ただ動かす”から、“強く、美しく、堅牢に動かす”へ。
この差が、個人開発の限界突破ポイントだと感じています。


🔮 次回予告:「運用ルールの確立」

次回は、Botの稼働スケジュール、障害時の対応、
ログ設計や通知の仕組みなど、いわゆる**「運用設計」**に踏み込みます。

個人開発でも、「企業システム並みに安定したBot運用」を目指していきます。


ここまで聞いてくださってありがとうございます。
このラジオが、あなた自身の開発にとって、ヒントや気づきになれば嬉しいです。

それではまた次回、よだかでした🕊️

-Bot