突然ですが、皆さんは量子化というキーワードを知っていますか?
生成AIにおける量子化とは、精度をほとんど劣化させずに、AIモデルのサイズを削減することです。
さて、そんな量子化について、ローカルでAIを処理しているとき私はふとあることを思いました。
このモデルの量子化…進捗ぜんぜん進まないな…
最近のヘビー級のモデルはどいつもこいつもサイズがデカい!
ユーザーのリソースは無限だと思っている節がありますね。
終わらない進捗
進捗バーが微動だにしないと楽しくなくなってきます。
AIが量子化するなら、待ち時間中、進捗バー側も量子化する必要があるのではないでしょうか?
それも、より高度な方法で。
より高度な方法とは
よくわからない概念には、さらにわからない概念をぶつけるのが効果的です。
量子でわからない概念と言えば…
量子力学ですよね?
量子力学とは
量子力学(りょうしりきがく、(英: quantum mechanics)は、一般相対性理論と共に現代物理学の根幹を成す理論・分野。主として、分子や原子あるいはそれを構成する電子などを対象とし、その微視的な物理現象を記述する力学である。
コペンハーゲン解釈においては、観測が行われると、状態を記述する波動関数が一つの状態に収縮する。上記の標準解釈では、観測という行為がいつどのように量子系に影響を与えて、その状態が実現したのかについては定義されない。
はい、もうわかりませんね。
ですが、進捗バーを食い入るように見つめている私たちにはピッタリです。
進捗バーの量子力学化(quantum-progress-bar)
ということで、Pythonライブラリquantum-progress-bar
を公開しました。
観測するたびに進捗が変化する進捗バーが使えるようになります
インストール
Pythonを使える環境でライブラリをインストールしてください。
pip install quantum-progress-bar
基本的な使い方
詳細はREADME_ja.mdをご覧ください。
基本はこれ
from quantum_progress_bar import quantum_progress
quantum_progress(total=100, width=50, delay=0.2)
出力は毎回ランダム。こんな感じになります(ちゃんと終わります):
[▓▒░█▄▌ ] 42% # 初観測
[█▄▌▓▒ ] 38% # 時間反転
[█▓▒░█▄▌▓█....█] 100% # 奇跡の収束
もっと本格的に使いたいならクラス形式で
from quantum_progress_bar import QuantumProgressBar
pb = QuantumProgressBar(total_steps=100)
for _ in range(10):
pb.quantum_progress()
print(f" 残り時間: {pb.uncertainty_estimate()}")
残り時間は「5 minutes (probably between 3 minutes - 12 minutes)
」とか、たまに「42 light years ± uncertainty principle
」みたいになります。
tqdm風に使う
tqdm
風にイテレータを使うならqqdm
をインポートしてください。
from quantum_progress_bar import qqdm
for i in qqdm(range(200)):
time.sleep(0.01)
手っ取り早く遊ぶコード
from quantum_progress_bar import QuantumProgressBar, quantum_progress, quantum_loading, qqdm
import time
print("🔬 Quantum Progress Bar Demo 🔬")
print("=" * 50)
print("\n1. Basic usage of quantum progress bar")
print("-" * 30)
# Display a quantum progress bar
quantum_progress(total=100, width=50, delay=0.1)
print("\n2. Direct usage of QuantumProgressBar class")
print("-" * 30)
# Initialize a quantum progress bar
pb = QuantumProgressBar(total_steps=1000, collapse_factor=0.7, uncertainty_level=0.9)
# Display progress
for _ in range(5):
progress = pb.quantum_progress(width=50)
print(f" Estimated time: {pb.uncertainty_estimate()}")
time.sleep(0.1)
print("\n3. Quantum entanglement")
print("-" * 30)
# Entangle with another progress bar
pb2 = QuantumProgressBar(total_steps=100)
pb.entangle(pb2)
pb.update(steps=10) # Affects both bars due to entanglement
pb.quantum_progress(width=50)
print()
pb2.quantum_progress(width=50)
print()
print("\n4. Quantum loading animation")
print("-" * 30)
quantum_loading(message="Loading quantum state", duration=10, width=50)
print("\n5. Usage of qqdm function like tqdm")
print("-" * 30)
print("Example of wrapping an iterator:")
for i in qqdm(range(200)):
# Some processing
time.sleep(0.05)
print("\nExample of using as a context manager:")
with qqdm(total_steps=20) as qbar:
for i in range(20):
# Some processing
time.sleep(0.05)
qbar.update(1)
print("\nThank you for enjoying the quantum progress display!")
Cline
実装にはClineをかなりの割合使いました。Claude3.7 sonnet
1ドルくらい。READMEを先に書いてから作るのがいいのかもしれない。
実用性
進捗をあいまいにしたい工程に使うのにおすすめです。
あとは非エンジニアに見せる時に「プログラムがめちゃくちゃ頑張っている!!」 と見せるために使えるかもしれません。
参考文献
偉大な参考文献
- Über das Gesetz der Energieverteilung im Normalspektrum
- Über einen die Erzeugung und Verwandlung des Lichtes betreffenden heuristischen Gesichtspunkt
- Quantisierung als Eigenwertproblem
リンク
READMEも遊んでいるのでご覧ください。