Как мы заставили гугловский TPU плакать

Как мы заставили гугловский TPU плакать: запускаем 10 миллиардов квантовых состояний на коленке

Привет! Помните мой прошлый пост, где я с умным видом доказывала, что квантовые компьютеры еще сто лет не смогут взломать нормальное постквантовое шифрование? Мой главный аргумент был в том, что они… плоские. Серьезно, если посмотреть на хваленые гугловские процессоры Sycamore или их свежий Willow — это же просто микросхемы. Кубиты там намертво припаяны к плоской подложке. Они как соседи по хрущевке: могут общаться только с теми, кто живет за стенкой. И пытаться такой плоской конструкцией взломать сложнейшие многомерные шифры — это как строить небоскреб из стикеров для заметок. Физика против.

Но наука, блин, несется слишком быстро, и я официально признаю: я облажалась. Оказывается, ребята из компании Quantinuum нашли способ сбежать из этого плоского ада. Они выкатили технологию Helios, и это полный разрыв шаблонов. Никаких твердых плат! Они берут реальные атомы бария, подвешивают их в воздухе с помощью электромагнитного поля и перемещают их лазерами прямо в процессе вычислений! Это называется ионной ловушкой. Атомы могут подлетать друг к другу в любом порядке. То есть кубиты больше не привязаны к «соседям», они могут мгновенно связаться с любой точкой процессора. Плоский мир официально кончился, квантовые процессоры стали объемными.

А раз мы вышли в третье измерение, забудьте про обычные кубиты, у которых только два состояния (0 и 1). Встречайте кудиты — элементы, которые могут удерживать в суперпозиции 4, 10 или сколько угодно состояний одновременно.

Я решила провести эксперимент прямо в Google Colab. Что будет, если мы симулируем схему уровня Т4 из 10 таких кудитов, но у каждого будет по 10 состояний? Чисто математически это 10 в 10-й степени.

То есть 10 миллиардов квантовых состояний. Одновременно. За один, представьте(!!!), такт.

Прежде чем я покажу код, давайте я объясню, почему ваш топовый игровой комп за пару сотен тысяч рублей просто сгорит и задохнется, если вы попытаетесь запустить это на нем. Чтобы классический процессор хотя бы просто понял, как эти 10 миллиардов вариантов влияют друг на друга, ему нужно построить матрицу взаимодействий. Знаете, какого размера? 10 миллиардов на 10 миллиардов ячеек. Чтобы просто записать эти цифры в оперативку, вам потребуется около 800 эксабайт памяти. Это больше, чем весь интернет-трафик планеты Земля за несколько месяцев! Компьютер зависнет намертво еще до того, как вы допишете код. А если пытаться перебирать варианты по очереди через обычные циклы for или while, то вычисления закончатся через пару сотен лет. Увидимся в следующем тысячелетии.

Так как же мы провернули это в обычном бесплатном блокноте Colab? Нас спас TPU (Tensor Processing Unit) от Google.

Обычно все думают, что TPU — это просто железка для обучения нейросетей, чтобы они рисовали аниме-картинки. Но на самом деле TPU — это идейный наследник старых аналоговых вычислительных машин из пятидесятых годов. Те древние монстры не знали, что такое двоичный код, и не крутили пошаговые циклы. Они просто пускали ток по хитрым схемам, и сама физика (законы Ома и Кирхгофа) выдавала готовый ответ мгновенно.

Гугловский TPU работает почти так же. Внутри него стоят аппаратные блоки матричного умножения. Для него наши 10 миллиардов квантовых состояний — это не бесконечная очередь из задач, которую надо уныло перебирать в цикле. Для него это одна гигантская многомерная «картинка». TPU берет этот массив данных и за один математический проход прогоняет через свои кремниевые ворота. Никаких циклов. Чистая аппаратная магия.

Вот вам код, который я написала. Обратите внимание — тут нет ни одного классического цикла для расчета состояний, всё отдано на откуп тензорным ядрам TPU:

import os
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

# setup tpu cluster connectivity in colab env
try:
    resolver = tf.distribute.cluster_resolver.TPUClusterResolver()
    tf.config.experimental_connect_to_cluster(resolver)
    tf.initialize_tpu_system(resolver)
    strategy = tf.distribute.TPUStrategy(resolver)
    print("Running on TPU")
except ValueError:
    print("TPU not detected, switching to local device fallback")
    strategy = tf.distribute.get_strategy()

with strategy.scope():
    # initialize uniform superposition state for a single 10-dimensional qudit
    single_qudit = tf.ones(, dtype=tf.complex64) / tf.sqrt(10.0)
   
    # build the t4 multi-qudit chain via successive kronecker products
    t4_state = single_qudit
    for _ in range(9):
        t4_state = tf.experimental.numpy.kron(t4_state, single_qudit)
       
    print(f"Total state space dimension initialized: {t4_state.shape:,}")

    # generate random phase perturbations to simulate chaotic background field
    quantum_noise = tf.random.normal([t4_state.shape], dtype=tf.float32)
    phases = tf.complex(0.0, quantum_noise)
    chaos_operator = tf.exp(phases)
   
    # apply phase kicks across the entire 10-billion state space in parallel
    final_chaotic_state = t4_state * chaos_operator
    print("Quantum chaos evolution complete")

# random sampling without sorting to capture the true chaotic texture
sample_size = 1000
total_elements = int(t4_state.shape)

# generate unique random indices across the entire 10-billion state space
random_indices = np.random.choice(total_elements, size=sample_size, replace=False)

# extract the random sub-states from the calculated tpu tensor
chaos_data = tf.gather(final_chaotic_state, random_indices).numpy()

# compute the dense interference matrix for the selected random subset
matrix_to_plot = np.abs(np.outer(chaos_data, np.conj(chaos_data)))

# plot the raw quantum noise map
plt.figure(figsize=(11, 9), dpi=150)
plt.imshow(matrix_to_plot, cmap='magma', interpolation='nearest')

plt.colorbar(label='Quantum Interference Intensity')
plt.title('True Quantum Chaos Sampling (T4 Scheme | 10 QuDits, d=10)', fontsize=12, pad=15)
plt.xlabel('Randomly Sampled States X', fontsize=10)
plt.ylabel('Randomly Sampled States Y', fontsize=10)

plt.show()

Когда вы нажмете Run, магия симулятора не выдаст вам скучную идеальную сеточку. Мы специально заставили программу выдернуть 1000 абсолютно случайных, хаотичных точек из разных концов этой 10-миллиардной пустоты.

В итоге на экране появляется нереально красивая, неоновая киберпанк-матрица. Это настоящая текстура квантовой пены. Каждая яркая точка на графике — это место, где фазы наших десятимерных частиц совпали и усилили друг друга в момент взрыва хаоса.

Мы не можем вывести на экран все 10 миллиардов вариантов сразу, потому что у нас расплавятся мониторы, но этот случайный снимок — наш честный взгляд в замочную скважину квантовой вселенной. Плоский мир официально отменяется, дальше будет только интереснее!


Стефания
https://stephaniia-bubnova.web.app/


Рецензии