common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING

Nobisuke

Dekisugi


autoQAOA
DEEPSCORE

Overview
Service overview
Terms of service

Privacy policy

Contact
Research

Sign in
Sign up
common.title

誰でも大規模QUBOアニーリング。PyTorchベースの無料QUBOソルバーTorch Tytanの使い方。

Yuichiro Minato

2024/02/09 11:05

こんにちは、ちょっと開発してみました。

無料のSDKでPyTorchベースで巨大な計算が解けます。

GPUを増やすと解ける問題を増やすことができると思いますが、今後の開発に期待です。

今回は単体のCPU/GPUを使って組合せ最適化問題を解いてみます。

Tytan(タイタン)というQUBOアニーリングのSDKに統合しました。

有志によって運用されています。

Tytan

https://github.com/tytansdk/tytan

使い方はシンプルです。とりあえずgithubに載せたので、インストールは、

pip install -U git+https://github.com/tytansdk/tytan

使い方はやはりシンプルです。今回のTorch TytanではPyTorchもインストールが必要ですので、合わせて入れておいてください。

通常のTytanでソルバーを変更するだけです。今回の指定するソルバーは、

solver = sampler.ArminSampler()

で、アルミンソルバーを指定すればOKです。標準ではCPUモードになっていますので、

solver = sampler.ArminSampler(mode="GPU")

のように指定してあげるとGPUモードになります。

from tytan import *
import random

N = 5000

#量子ビットを用意(まとめて定義)
q = symbols_list([N])
print(q)

式を記述(ランダムな数を与えます)

H = 0

バイアスを設定

for i in range(N):
H += random.randint(-10, 10) * q[i]

全部の相互作用を追加するの大変なので、5000箇所だけ指定

for i in range(5000):
H += random.choice([-1, 1]) * q[random.randint(0,N-1)] * q[random.randint(0,N-1)]

print(H)

#コンパイル
qubo, offset = Compile(H).get_qubo()

#サンプラー選択
solver = sampler.ArminSampler(mode="GPU")

#サンプリング
result = solver.run(qubo, show=True)

#結果
for r in result:
print(r)

こんな感じですね。

[q0 q1 q2 ... q4997 q4998 q4999]
3*q0 - 9*q1 - 3*q10 - 10*q100 + 4*q1000 (略)
GPU MODE
[{'q0': 0, 'q1': 1, 'q10': 1, (中略), -11177.0, 1]

今回はオプションで履歴をつけてるので、

サンプラー自体はこちらにあります、

https://github.com/tytansdk/tytan/blob/main/tytan/sampler.py

インスタンス生成時にはモードの指定、シードの指定ができます。mode = 'CPU' か mode='GPU'が指定できます。

def __init__(self, mode='CPU', seed=None, seed_cuda=None):

実行時にはいくつかオプションがありますが、重要なのは、num_iterationsでシミュレーションのステップ数を長くできます。大規模になったらこちらを大きめにとるのが良いかと。また、show=Trueを指定するとグラフが見れます。

def run(self, qubo, shots=1, initial_temp=10.0, final_temp=0.1, alpha=0.95, num_iterations=10000, show=False):

どうでしょうか?GPUを持っているとかなり夢が広がります。今回の問題もGoogle Colabの無料T4でも10秒くらいで計算が終わります。式展開などを入れても20秒ほどでした。ぜひ色々試してみてください。

© 2025, blueqat Inc. All rights reserved