BigQuant使用文档

本地代码在 BigQuant AIStudio 云端运行

由bq1fuwkt创建,最终由bq1fuwkt 被浏览 3 用户

问题描述

我有一些 Python 脚本需要在云端运行(例如需要更大内存、GPU 资源,或访问云端专有数据),应该如何通过本地 SDK 将代码提交到 BigQuant AIStudio 云端执行?

详细解答

BigQuant SDK 提供了 aistudio 模块,可以启动云端 AIStudio 在其中执行本地的 Python 代码或脚本文件。

1. 查看可用的云端资源规格

首先查看有哪些资源配置可供选择:

  import bigquant

  # 获取 AIStudio 资源规格列表
  specs = bigquant.aistudio.list()

  print(f"可用资源规格数量: {len(specs)}")
  print("\n资源规格列表:")
  print(f"{'规格ID':<38} {'名称':<15} {'CPU':<4} {'内存(GB)':<8} {'GPU':<4} {'价格(BQC/分)'}")
  print("-" * 90)

  for spec in specs[:10]:  # 只显示前10个
      print(f"{spec['id']:<38} {spec['name']:<15} {spec['cpu']:<4} "
            f"{spec['memory']:<8} {spec['gpu']:<4} {spec.get('price', 0)}")
  • 关键说明
    • 资源规格包含 CPU、内存、GPU 等配置信息
    • price 表示使用价格(BQC/分钟),0 表示免费规格
    • 记录所需规格的 id,用于后续启动实例

2. 启动 AIStudio 实例

使用默认规格或指定规格启动云端实例:

  # 方式1: 使用默认规格(免费 D0 规格:1C/6G)
  studio = bigquant.aistudio.start()
  print("✓ AIStudio 已启动(默认规格)")

  # 方式2: 指定资源规格
  resource_spec_id = "3fa85f64-5717-4562-b3fc-2c963f66afa6"  # 替换为实际规格ID
  studio = bigquant.aistudio.start(resource_spec_id=resource_spec_id)
  print(f"✓ AIStudio 已启动(规格ID: {resource_spec_id})")
  • 关键说明
    • start() 会自动等待实例启动完成(最多60秒)
    • 如果已有运行中的实例且规格匹配,会直接返回现有实例
    • 如果规格不匹配,会关闭旧实例并启动新实例
    • 实例启动后会保持运行,直到手动关闭或超时自动关闭

3. 执行代码字符串

在云端实例中执行 Python 代码:

  # 定义要执行的代码
  code = """
  import pandas as pd
  import numpy as np

  # 在云端执行计算
  data = pd.DataFrame({
      'a': np.random.randn(5),
      'b': np.random.randn(5)
  })

  # 计算统计信息
  mean_a = data['a'].mean()
  std_b = data['b'].std()

  print(f"Mean of a: {mean_a:.4f}")
  print(f"Std of b: {std_b:.4f}")
  print("\\nDataFrame:")
  print(data)
  """

  # 执行代码并获取输出
  output = studio.run(code, is_code=True)
  print("执行结果:")
  print(output)
  • 关键说明
    • is_code=True 表示传入的是代码字符串(不是文件路径)
    • 代码在云端 Jupyter kernel 中执行
    • print() 的输出会通过 WebSocket 返回到本地
    • 执行超时时间默认为 300 秒(5分钟)

4. 执行本地脚本文件

# 假设有一个本地脚本文件
  script_path = "/Users/username/my_script.py"

  # 执行脚本并获取输出
  output = studio.run(script_path, is_code=False)
  print("脚本执行结果:")
  print(output)
  • 关键说明
    • is_code=False 表示传入的是文件路径(必须是绝对路径)
    • SDK 会读取本地文件内容并发送到云端执行
    • 脚本中的 print() 输出会返回到本地

5. 在云端访问 BigQuant 数据

  code = """
  import dai

  # 在云端查询股票数据
  result = dai.query('''
      SELECT date, instrument, close, volume
      FROM cn_stock_bar1d
      WHERE date >= '2024-12-01' AND date <= '2024-12-10'
        AND instrument IN ('000001.SZ', '000002.SZ')
      ORDER BY date, instrument
  ''')

  df = result.df()
  print(f"查询到 {len(df)} 条数据")
  print(df.head(10))
  """
  output = studio.run(code, is_code=True)
  print(output)
  • 关键说明
    • 云端代码使用 import dai(不是 import bigquant)
    • 云端查询比本地 SDK 查询更快(无需网络传输数据)
    • 适合大数据量查询或复杂计算场景

6. 云端计算密集型任务

利用云端资源进行复杂计算:

  code = """
  import pandas as pd
  import numpy as np
  from scipy import stats

  # 模拟大规模数据处理
  np.random.seed(42)
  data = pd.DataFrame({
      'returns': np.random.randn(100000) * 0.01
  })

  # 计算各种统计指标
  mean = data['returns'].mean()
  std = data['returns'].std()
  skew = stats.skew(data['returns'])
  kurt = stats.kurtosis(data['returns'])

  # 计算 VaR 和 CVaR
  var_95 = np.percentile(data['returns'], 5)
  cvar_95 = data['returns'][data['returns'] <= var_95].mean()

  print(f"样本数量: {len(data)}")
  print(f"均值: {mean:.6f}")
  print(f"标准差: {std:.6f}")
  print(f"偏度: {skew:.6f}")
  print(f"峰度: {kurt:.6f}")
  print(f"VaR (95%): {var_95:.6f}")
  print(f"CVaR (95%): {cvar_95:.6f}")
  """

  output = studio.run(code, is_code=True)
  print("计算结果:")
  print(output)
  • 关键说明
    • 云端实例可以使用更大的内存和 CPU 资源
    • 适合处理大规模数据或复杂计算
    • 计算完成后结果通过 print() 返回

7. 获取云端计算结果(保存为数据源)

如果云端计算结果需要在本地使用,可以保存为 DataSource:

  code = """
  import dai
  import pandas as pd

  # 在云端计算因子
  result = dai.query('''
      SELECT 
          date, 
          instrument, 
          close,
          m_avg(close, 5) as ma5,
          m_avg(close, 20) as ma20
      FROM cn_stock_bar1d
      WHERE date >= '2024-01-01' AND date <= '2024-12-31'
        AND instrument IN ('000001.SZ', '000002.SZ', '600000.SH')
  ''')

  df = result.df()

  # 保存为数据源
  ds = dai.DataSource.write_bdb(
      data=df,
      id="cloud_computed_factors",
      partitioning=["date"],
      indexes=["instrument"],
      unique_together=["date", "instrument"],
      overwrite=True
  )

  # 输出数据源ID(重要!)
  print(ds.id)
  """

  # 执行代码,获取数据源ID
  datasource_id = studio.run(code, is_code=True).strip()
  print(f"✓ 云端计算完成,数据源ID: {datasource_id}")

  # 在本地读取云端计算的结果
  ds = bigquant.dai.DataSource(datasource_id)
  df_local = ds.read_bdb(as_type=pd.DataFrame)
  print(f"\n本地读取到 {len(df_local)} 条数据")
  print(df_local.head())
  • 关键说明
    • 云端计算结果保存为 DataSource,便于本地读取
    • 通过 print(ds.id) 输出数据源 ID
    • 本地使用该 ID 读取数据

8. 关闭 AIStudio 实例

使用完毕后关闭实例,释放资源:

  # 关闭实例
  studio.close()
  print("✓ AIStudio 实例已关闭")
  • 关键说明
    • close() 会停止云端容器,释放计算资源
    • 配置和数据会被保留,可以重新启动
    • 如果不手动关闭,实例会在一段时间后自动关闭

使用 CLI 工具执行脚本

BigQuant SDK 还提供了命令行工具,可以直接提交脚本:

  BigQuant SDK 还提供了命令行工具,可以直接提交脚本:

  # 查看可用资源规格
  bq aistudio list

  # 执行本地脚本
  bq aistudio run --file /path/to/your_script.py

  # 指定资源规格
  bq aistudio run --file /path/to/your_script.py \
    --resource-spec-id "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  • 关键说明
    • CLI 工具会自动启动实例、执行脚本、显示输出
    • 适合快速测试或集成到自动化流程
    • 脚本必须是绝对路径

关键概念解释

AIStudio

BigQuant 提供的云端 AIStudio 环境,支持多种资源配置(CPU、内存、GPU)。用户可以按需启动实例,执行计算密集型任务。

资源规格 (Resource Spec)

定义 AIStudio 实例的硬件配置,包括:

  • cpu: CPU 核数
  • memory: 内存大小(GB)
  • gpu: GPU 数量
  • price: 使用价格(BQC/分钟)

studio.run() 执行流程

  1. 检查 AIStudio 健康状态
  2. 启动 Jupyter kernel
  3. 通过 WebSocket 发送代码
  4. 等待执行完成并收集输出
  5. 返回 stdout 输出(print 内容)

is_code 参数

  • is_code=True: 传入的是 Python 代码字符串
  • is_code=False: 传入的是脚本文件路径(必须是绝对路径)

云端 vs 本地执行

  • 云端执行: 使用 studio.run(),代码在 AIStudio 中执行,适合大数据量或复杂计算
  • 本地执行: 直接运行 Python 脚本,适合小规模计算或开发调试

适用场景

  • 大规模数据处理

    本地内存不足时,使用云端大内存实例处理海量数据。

  • 批量因子计算

    计算大量股票的技术指标或自定义因子。

  • 云端数据访问

    直接在云端查询和处理数据,无需本地下载。

  • 定时任务

    通过脚本自动化执行定期计算任务。

注意事项

  • 路径必须绝对: 执行脚本时,文件路径必须是绝对路径(如 /Users/username/script.py)
  • 实例自动关闭: 长时间不使用会自动关闭,建议及时手动关闭以节省资源
  • 输出限制: 只能获取 print() 的输出,无法直接返回 Python 对象
  • 数据传递: 云端计算结果需保存为 DataSource 后在本地读取
  • 超时设置: 默认执行超时 300 秒,超长任务需考虑分批处理
  • 错误处理: 代码执行错误会通过异常返回,需做好异常捕获

性能优化建议

  • 选择合适规格: 根据任务需求选择 CPU/内存配置,避免资源浪费
  • 减少数据传输: 尽量在云端完成计算,只传递最终结果
  • 批量处理: 将多个小任务合并为一次云端执行
  • 复用实例: 多个任务可复用同一个 AIStudio 实例,无需反复启动
  • 并行计算: 利用云端多核 CPU 进行并行计算

\

{link}