Pozyskanie plików¶
Wejdź na https://github.com/iitis/AkademiaSztukiKwantowej - jest to repozytorium z tym szkoleniem. Systemy Linux z reguły mają docelowo zainstalowane Git. W pozostałych przypadkach trzeba go zainstalować ręcznie. Można to zrobić tutaj.
kopiuj URL repozytorium z GitHub (zakładka Code → HTTPS).
W terminalu przejdź do katalogu, gdzie chcesz je mieć i wykonaj:
- Wejdź do katalogu repo:
cd AkademiaSztukiKwantowej
- Przełącz się na gałąź ze szkoleniem
git checkout bg/quantum_annealing
- Polecane jest utworzenie własnej gałęzi. Pozwoli to trzymać własne rozwiązania w repozytorium
git branch nazwa_galezi
git checkout nazwa_galezi
Konfiguracja głównego środowiska pracy¶
Niezbędne minimum¶
Zainstaluj język programowania Python (do ściągnięcia tutaj) w wersji 3.12. Następnie postępuj od kroku 5 w standardowej instalacji.
Standardowa instalacja¶
W trakcie szkoleniu będziemy głównie posługiwać się językiem programowania Python. W komputerach kwantowych często jest używany jako API. Zakładamy korzystanie z Anaconda - dystrybucji Pythona dedykowanej analizie danych i zastosowaniom naukowych. Do instalacji, aktualizacji i zarządzania środowiskami korzystać będziemy z menedżera pakietów Conda.
Zainstaluj conda
- Przejdź na oficjalną stronę Anaconda, gdzie możesz pobrać wybrany instalator (Miniconda, Anaconda Distribution lub Miniforge). Więcej informacji o każdym z tych instalatorów znajdziesz w dokumentacji instalacji conda. Po pobraniu, zainstaluj conda.
Kolejne kroki wykonujemy w terminalu systemowym / conda¶
- Utwórz środowisko wirtualne.
- W teminalu systemowym/anaconda prompt wpisz:
conda create --name szkolenia
Aktywuj środowisko:
- W teminalu/anaconda prompt wpisz:
conda activate szkolenia
ilekroć będziemy przełączać się między środowiskami należy zdezaktywować bieżące środowisko conda deactivate i aktywować inne.
- Zainstaluj Pythona w wymaganej wersji. Conda pozwala operować różnymi wersjami pythona dla każdego środowiska.
- W teminalu/anaconda prompt wpisz:
conda install python=3.12
weryfikację instalacji można wykonać komendą python --version
- Instalacja Ipykernel - backend dla notatnika Jupyter.
pip install ipykernel
Przechodzimy do narzędzia obsługującego notatniki Jupyter (np. może to być VSCode).¶
- Otwieramy folder z plikami szkoleniowymi. Wybieramy plik Setup.ipynb oraz ustawiamy jądro. W VSCode należy po otwarciu pliku wybrać (1)
Select Kernel, a następnie na rozwijanej liście (2) wybrać utworzone wcześniej środowiskoszkolenia
Tak skonfigurowane środowisko pozwoli uruchamiać kolejne komendy za pomocą wykonywalnych komórek notatnika. Aby uruchomić komórkę wystarczy kliknąć na ikonę 'play' obok komórki.
Instalacja paczek z pliku
requirements.txt.Uwaga! Jeśli z jakiegoś powodu plik znajduje się poza dostarczonym folderem będzie trzeba podać do niego pełną ścieżkę, zwróć uwagę na podwójne ukośniki.
"C:\\Users\\NAZWA_USERA\\Downloads\\requirements.txt"
%pip install -r requirements.txt
DEPRECATION: Loading egg at /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages/pyaml-25.1.0-py3.12.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation. Discussion can be found at https://github.com/pypa/pip/issues/12330 Requirement already satisfied: matplotlib==3.10.0 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from -r requirements.txt (line 1)) (3.10.0) Requirement already satisfied: networkx==3.4.2 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from -r requirements.txt (line 2)) (3.4.2) Requirement already satisfied: numpy==2.0.2 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from -r requirements.txt (line 3)) (2.0.2) Requirement already satisfied: pandas==2.2.3 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from -r requirements.txt (line 4)) (2.2.3) Requirement already satisfied: tqdm==4.67.1 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from -r requirements.txt (line 5)) (4.67.1) Requirement already satisfied: dwave-ocean-sdk==8.2.0 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from -r requirements.txt (line 6)) (8.2.0) Requirement already satisfied: qutip==5.1.1 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from -r requirements.txt (line 7)) (5.1.1) Requirement already satisfied: pyqubo==1.5.0 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from -r requirements.txt (line 8)) (1.5.0) Requirement already satisfied: contourpy>=1.0.1 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from matplotlib==3.10.0->-r requirements.txt (line 1)) (1.3.1) Requirement already satisfied: cycler>=0.10 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from matplotlib==3.10.0->-r requirements.txt (line 1)) (0.12.1) Requirement already satisfied: fonttools>=4.22.0 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from matplotlib==3.10.0->-r requirements.txt (line 1)) (4.55.7) Requirement already satisfied: kiwisolver>=1.3.1 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from matplotlib==3.10.0->-r requirements.txt (line 1)) (1.4.8) Requirement already satisfied: packaging>=20.0 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from matplotlib==3.10.0->-r requirements.txt (line 1)) (24.2) Requirement already satisfied: pillow>=8 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from matplotlib==3.10.0->-r requirements.txt (line 1)) (11.1.0) Requirement already satisfied: pyparsing>=2.3.1 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from matplotlib==3.10.0->-r requirements.txt (line 1)) (3.2.1) Requirement already satisfied: python-dateutil>=2.7 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from matplotlib==3.10.0->-r requirements.txt (line 1)) (2.9.0.post0) Requirement already satisfied: pytz>=2020.1 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from pandas==2.2.3->-r requirements.txt (line 4)) (2024.2) Requirement already satisfied: tzdata>=2022.7 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from pandas==2.2.3->-r requirements.txt (line 4)) (2025.1) Requirement already satisfied: dimod==0.12.18 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (0.12.18) Requirement already satisfied: dwave-cloud-client==0.13.3 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (0.13.3) Requirement already satisfied: dwave-gate==0.3.3 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (0.3.3) Requirement already satisfied: dwave-hybrid==0.6.13 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (0.6.13) Requirement already satisfied: dwave-inspector==0.5.2 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (0.5.2) Requirement already satisfied: dwave-networkx==0.8.16 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (0.8.16) Requirement already satisfied: dwave-optimization==0.5.1 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (0.5.1) Requirement already satisfied: dwave-preprocessing==0.6.7 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (0.6.7) Requirement already satisfied: dwave-samplers==1.4.0 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (1.4.0) Requirement already satisfied: dwave-system==1.29.0 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (1.29.0) Requirement already satisfied: dwavebinarycsp==0.3.1 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (0.3.1) Requirement already satisfied: minorminer==0.2.17 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (0.2.17) Requirement already satisfied: penaltymodel==1.2.0 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (1.2.0) Requirement already satisfied: scipy>=1.9 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from qutip==5.1.1->-r requirements.txt (line 7)) (1.15.1) Requirement already satisfied: dwave-neal>=0.5.7 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from pyqubo==1.5.0->-r requirements.txt (line 8)) (0.6.0) Requirement already satisfied: Deprecated>=1.2.12 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from pyqubo==1.5.0->-r requirements.txt (line 8)) (1.2.18) Requirement already satisfied: six>=1.15.0 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from pyqubo==1.5.0->-r requirements.txt (line 8)) (1.17.0) Requirement already satisfied: requests<3,>=2.25 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from requests[socks]<3,>=2.25->dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (2.32.3) Requirement already satisfied: urllib3<3,>=1.26 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (2.3.0) Requirement already satisfied: pydantic<3,>=2 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (2.10.6) Requirement already satisfied: homebase<2,>=1.0 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (1.0.1) Requirement already satisfied: click<9,>=7.0 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (8.1.8) Requirement already satisfied: plucky<0.5,>=0.4.3 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (0.4.3) Requirement already satisfied: diskcache<6,>=5.2.1 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (5.6.3) Requirement already satisfied: werkzeug<4,>=2.2 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (3.1.3) Requirement already satisfied: typing-extensions<5,>=4.5.0 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (4.12.2) Requirement already satisfied: authlib<2,>=1.2 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (1.4.1) Requirement already satisfied: importlib_metadata>=5.0.0 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (8.6.1) Requirement already satisfied: orjson>=3.10 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (3.10.15) Requirement already satisfied: Flask<4,>=2.2 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from dwave-inspector==0.5.2->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (3.1.0) Requirement already satisfied: fasteners>=0.15 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from minorminer==0.2.17->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (0.19) Requirement already satisfied: wrapt<2,>=1.10 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from Deprecated>=1.2.12->pyqubo==1.5.0->-r requirements.txt (line 8)) (1.17.3) Requirement already satisfied: cryptography in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from authlib<2,>=1.2->dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (44.0.0) Requirement already satisfied: Jinja2>=3.1.2 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from Flask<4,>=2.2->dwave-inspector==0.5.2->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (3.1.5) Requirement already satisfied: itsdangerous>=2.2 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from Flask<4,>=2.2->dwave-inspector==0.5.2->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (2.2.0) Requirement already satisfied: blinker>=1.9 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from Flask<4,>=2.2->dwave-inspector==0.5.2->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (1.9.0) Requirement already satisfied: zipp>=3.20 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from importlib_metadata>=5.0.0->dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (3.21.0) Requirement already satisfied: annotated-types>=0.6.0 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from pydantic<3,>=2->dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (0.7.0) Requirement already satisfied: pydantic-core==2.27.2 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from pydantic<3,>=2->dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (2.27.2) Requirement already satisfied: charset-normalizer<4,>=2 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from requests<3,>=2.25->requests[socks]<3,>=2.25->dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (3.4.1) Requirement already satisfied: idna<4,>=2.5 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from requests<3,>=2.25->requests[socks]<3,>=2.25->dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (3.10) Requirement already satisfied: certifi>=2017.4.17 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from requests<3,>=2.25->requests[socks]<3,>=2.25->dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (2024.12.14) Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from requests[socks]<3,>=2.25->dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (1.7.1) Requirement already satisfied: MarkupSafe>=2.1.1 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from werkzeug<4,>=2.2->dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (3.0.2) Requirement already satisfied: cffi>=1.12 in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from cryptography->authlib<2,>=1.2->dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (1.17.1) Requirement already satisfied: pycparser in /home/tsmierzchalski/anaconda3/envs/szkolenia/lib/python3.12/site-packages (from cffi>=1.12->cryptography->authlib<2,>=1.2->dwave-cloud-client==0.13.3->dwave-ocean-sdk==8.2.0->-r requirements.txt (line 6)) (2.22) Note: you may need to restart the kernel to use updated packages.
- Poniższą komendę wykonaj w terminalu. Konfiguruje software niezbędny do pracy z komputerami dwave.
dwave setup
Kilka słów o używanych pakietach¶
NumPy- obliczenia numeryczne, u nas dla efektywnego wykonywania operacji na macierzachPandas- obróbka i praca ze zbiorami danychMatplotlib- wykresy, ogólniej wizualizacje matematyczneNetworkx- działanie na grafachtqdm- renderowanie paska postępu, dla wygodydwave-ocean-sdk- komunikacja z dwave i wiele innych przydatnych funkcjonalnalności przydatnych dla naszych modeli, obszerna paczka pakietów
Dodatkowe wymagania odnośnie GPU¶
Część szkolenia będzie skupiona na wykorzystaniu możliwości GPU do wspierania obliczeń. Wymagania sprzętowe:
- Procesor graficzny NVIDIA CUDA o możliwości obliczeniowej (Compute Capability) 3.0 lub wyższej. Niemal wszystkie współczesne karty graficzne spełniają to wymaganie. Listę wspieranych urządzeń znajdziesz tutaj.
- CUDA Toolkit: v11.2 / v11.3 / v11.4 / v11.5 / v11.6 / v11.7 / v11.8 / v12.0 / v12.1 / v12.2 / v12.3 / v12.4 / v12.5 / v12.6
By sprawdzić wersję CUDA Toolkit wpisz nvcc --version w terminalu.
Do interakcji z GPU będzie potrzebny dodatkowy pakiet Python - CuPy. Komenda do instalacji CuPy różni się w zależności od posiadanej wersji CUDA Toolkit. W przypadku problemów z instalacją pomoc znajdziesz tutaj.
# Instalacja CuPy dla v11.2 ~ 11.8
%pip install cupy-cuda11x==13.6
# Instalacja CuPy dla v12.x
%pip install cupy-cuda12x==13.6
Dodatkowe środowisko wymagane by wykonać benchmarki¶
Wykonanie niektórych benchmarków będzie wymagało innej wersji pythona. W konsoli wpisz po kolei:
conda deactivate
zmiana środowiska w konsoli
conda create --name benchmark conda activate benchmark conda install python=3.9
%pip install ipykernel
%pip install omnisolver-bruteforce
%pip install git+https://github.com/bqth29/simulated-bifurcation-algorithm.git
Kilka słów o używanych pakietach¶
omnisolver-bruteforce- wysoko zoptymalizowana implementacja algorytmu wyczerpującego przeszukiwania, która używa podobnego algorytmu co nasza implementacja. Tutaj można znaleźć dodatkowe informacje.Simulated Bifurcation for Python- implementacja algorytmu symulowanej bifurkacji. Tutaj można znaleźć dodatkowe informacje.