# Quantum Circuit Simulator Platform ## Update history * 2023/02/28 Remove local account information, suppress the confusion of authentication. * 2023/02/25 Add NIS authentication method. ## Connection Information hostname: quantum.nchc.org.tw IP address: 140.110.18.28 PORT: 22 (Only available in Taiwan) ## System Architecture ![Architecture](https://i.imgur.com/Dp9xoII.png) ### IP mapping <style type="text/css"> .tg {border-collapse:collapse;border-spacing:0;} .tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px; overflow:hidden;padding:10px 5px;word-break:normal;} .tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px; font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} .tg .tg-34fe{background-color:#c0c0c0;border-color:inherit;text-align:center;vertical-align:top} .tg .tg-llyw{background-color:#c0c0c0;border-color:inherit;text-align:left;vertical-align:top} .tg .tg-0pky{border-color:inherit;text-align:left;vertical-align:top} .tg .tg-mfhl{background-color:#ffffc7;border-color:inherit;text-align:center;vertical-align:top} .tg .tg-ncd7{background-color:#ffffc7;border-color:inherit;text-align:left;vertical-align:top} .markdown-body { max-width: 1000px; } </style> <table class="tg"> <thead> <tr> <th class="tg-0pky"></th> <th class="tg-0pky">Login node</th> <th class="tg-mfhl" colspan="5">HPC node</th> </tr> </thead> <tbody> <tr> <td class="tg-0pky">hostname</td> <td class="tg-0pky">QUANTUM<br></td> <td class="tg-ncd7">DGX101</td> <td class="tg-ncd7">DGX102</td> <td class="tg-ncd7">DGX103</td> <td class="tg-ncd7">DGX104</td> <td class="tg-ncd7">DGX105</td> </tr> <tr> <td class="tg-0pky">control lane</td> <td class="tg-0pky">192.168.27.99</td> <td class="tg-ncd7">192.168.27.1</td> <td class="tg-ncd7">192.168.27.2</td> <td class="tg-ncd7">192.168.27.3</td> <td class="tg-ncd7">192.168.27.4</td> <td class="tg-ncd7">192.168.27.5</td> </tr> <tr> <td class="tg-0pky">data lane</td> <td class="tg-0pky">172.16.31.99</td> <td class="tg-ncd7">172.16.31.1</td> <td class="tg-ncd7">172.16.31.2</td> <td class="tg-ncd7">172.16.31.3</td> <td class="tg-ncd7">172.16.31.4</td> <td class="tg-ncd7">172.16.31.5</td> </tr> <tr> <td class="tg-0pky">description</td> <td class="tg-0pky">140.110.18.28</td> <td class="tg-ncd7"></td> <td class="tg-ncd7"></td> <td class="tg-ncd7"></td> <td class="tg-ncd7"></td> <td class="tg-ncd7"></td> </tr> <tr> <td class="tg-0pky"></td> <td class="tg-34fe" colspan="6">Interactive node</td> </tr> <tr> <td class="tg-0pky">hostname</td> <td class="tg-llyw">DGX106</td> <td class="tg-llyw">DGX107</td> <td class="tg-llyw">DGX108</td> <td class="tg-llyw">DGX109</td> <td class="tg-llyw">DGX110</td> <td class="tg-llyw">DGX111</td> </tr> <tr> <td class="tg-0pky">control lane</td> <td class="tg-llyw">192.168.27.6</td> <td class="tg-llyw">192.168.27.7</td> <td class="tg-llyw">192.168.27.8</td> <td class="tg-llyw">192.168.27.9</td> <td class="tg-llyw">192.168.27.10</td> <td class="tg-llyw">192.168.27.11</td> </tr> <tr> <td class="tg-0pky">data lane</td> <td class="tg-llyw">172.16.31.6</td> <td class="tg-llyw">172.16.31.7</td> <td class="tg-llyw">172.16.31.8</td> <td class="tg-llyw">172.16.31.9</td> <td class="tg-llyw">172.16.31.10</td> <td class="tg-llyw">172.16.31.11</td> </tr> <tr> <td class="tg-0pky">description</td> <td class="tg-llyw"></td> <td class="tg-llyw"></td> <td class="tg-llyw"></td> <td class="tg-llyw"></td> <td class="tg-llyw"></td> <td class="tg-llyw"></td> </tr> </tbody> </table> ### Software stack <style type="text/css"> .tg {border-collapse:collapse;border-spacing:0;} .tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px; overflow:hidden;padding:10px 5px;word-break:normal;} .tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px; font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} .tg .tg-34fe{background-color:#c0c0c0;border-color:inherit;text-align:center;vertical-align:top} .tg .tg-v6bp{background-color:#FFFFC7;border-color:inherit;text-align:left;vertical-align:top} .tg .tg-llyw{background-color:#c0c0c0;border-color:inherit;text-align:left;vertical-align:top} .tg .tg-0pky{border-color:inherit;text-align:left;vertical-align:top} .tg .tg-mfhl{background-color:#ffffc7;border-color:inherit;text-align:center;vertical-align:top} .tg .tg-ncd7{background-color:#ffffc7;border-color:inherit;text-align:left;vertical-align:top} .tg .tg-iaeg{background-color:#C0C0C0;border-color:inherit;text-align:left;vertical-align:top} </style> <table class="tg"> <thead> <tr> <th class="tg-0pky"></th> <th class="tg-0pky">Login node</th> <th class="tg-mfhl" colspan="5">HPC node</th> </tr> </thead> <tbody> <tr> <td class="tg-0pky">hostname</td> <td class="tg-0pky">QUANTUM<br></td> <td class="tg-ncd7">DGX101</td> <td class="tg-ncd7">DGX102</td> <td class="tg-ncd7">DGX103</td> <td class="tg-ncd7">DGX104</td> <td class="tg-ncd7">DGX105</td> </tr> <tr> <td class="tg-0pky">OS</td> <td class="tg-0pky">Ubuntu 22.04</td> <td class="tg-ncd7">DGX OS 6.2.1</td> <td class="tg-v6bp">DGX OS 6.2.1</td> <td class="tg-v6bp">DGX OS 6.2.1</td> <td class="tg-v6bp">DGX OS 6.2.1</td> <td class="tg-v6bp">DGX OS 6.2.1</td> </tr> <tr> <td class="tg-0pky">driver<br></td> <td class="tg-0pky">NA</td> <td class="tg-ncd7">535.183.01</td> <td class="tg-v6bp">535.183.01</td> <td class="tg-v6bp">535.183.01</td> <td class="tg-v6bp">535.183.01</td> <td class="tg-v6bp">535.183.01</td> </tr> <tr> <td class="tg-0pky">cuda</td> <td class="tg-0pky">NA</td> <td class="tg-ncd7">12.2</td> <td class="tg-v6bp">12.2</td> <td class="tg-v6bp">12.2</td> <td class="tg-v6bp">12.2</td> <td class="tg-v6bp">12.2</td> </tr> <tr> <td class="tg-0pky"></td> <td class="tg-34fe" colspan="6">Interactive node</td> </tr> <tr> <td class="tg-0pky">hostname</td> <td class="tg-llyw">DGX106</td> <td class="tg-llyw">DGX107</td> <td class="tg-llyw">DGX108</td> <td class="tg-llyw">DGX109</td> <td class="tg-llyw">DGX110</td> <td class="tg-llyw">DGX111</td> </tr> <tr> <td class="tg-0pky">OS</td> <td class="tg-llyw">DGX OS 6.2.1</td> <td class="tg-llyw">DGX OS 6.2.1</td> <td class="tg-llyw">DGX OS 6.2.1</td> <td class="tg-llyw">DGX OS 6.2.1</td> <td class="tg-llyw">DGX OS 6.2.1</td> <td class="tg-llyw">DGX OS 6.2.1</td> </tr> <tr> <td class="tg-0pky">driver<br></td> <td class="tg-llyw">535.183.01</td> <td class="tg-iaeg">535.183.01</td> <td class="tg-iaeg">535.183.01</td> <td class="tg-iaeg">535.183.01</td> <td class="tg-iaeg">535.183.01</td> <td class="tg-iaeg">535.183.01</td> </tr> <tr> <td class="tg-0pky">cuda</td> <td class="tg-llyw">12.2</td> <td class="tg-iaeg">12.2</td> <td class="tg-iaeg">12.2</td> <td class="tg-iaeg">12.2</td> <td class="tg-iaeg">12.2</td> <td class="tg-iaeg">12.2</td> </tr> </tbody> </table> ## Monitoring [grafana](http://140.110.18.28:3000/d/Oxed_c6Wz/nvidia-dcgm-exporter-dashboard?var-gpu=All&from=1675779059421&to=1675779959421&orgId=1) ## Update password We introduced NIS authentication on our system. You don't have to change your password on every node. Please use `yppasswd` to change your password instead. ## Passwordless authentication Under constrution ## Scenario ### Interactive mode 1. Login to the login node(head node). 2. ssh to interactive node (Ex. 192.168.27.11). 3. Run your job (Take jupyter as example.) 3.1. Native Usage 3.1.1. Create an virtual environment. `python3 -m venv jupyterlab-qiskit` 3.1.2. Activate virtual environment. `source ./jupyterlab-qiskit/bin/activate` 3.1.2. Install desired packages. `pip3 install jupyterlab jupyter-events==0.5.0 qiskit qiskit[visualization] numpy==1.23 matplotlib pylatexenc seaborn ipywidgets` 3.1.3. Run your APP. `jupyter-lab --ip="0.0.0.0"` 3.2. Container (alternate) 3.2.1. Pull docker image. `docker pull tensorflow/tensorflow:latest-gpu-jupyter` 3.2.2. Run the image. cpu container `docker run -it --rm -v $(realpath ~/notebooks):/tf/notebooks -p 8888:8888 tensorflow/tensorflow:latest-gpu-jupyter` gpu container (Use `--runtime=nvidia` to leverage gpu resource) `docker run -it --rm -v $(realpath ~/notebooks):/tf/notebooks --runtime=nvidia -p 8888:8888 tensorflow/tensorflow:latest-gpu-jupyter` ![](https://i.imgur.com/WhGArKR.png) 4. Build a ssh tunnel to interactive node. 4.1. Moboxterm (windows) ![](https://i.imgur.com/y2Xrkib.png) ![](https://i.imgur.com/5NwfCeI.png) 6.2. plink (windows) 7.3. direct ssh command (linux & mac) 5. Open your browser and go to http://127.0.0.1:localport/?token=xxxxxxxxxxxxxxxxxxxxxxx (Ex. http://127.0.0.1:8321/?token=xxxxxxxxxxxxxxxxxxxxxxx) ![](https://i.imgur.com/QntgJw9.png) ### HPC mode (Not ready yet!) 1. Login to the login node(head node). 2. Prepare submittion script. 3. Use `sbatch` submit to slurm. ### Use conda ``` user@QUANTUM:~$ source /opt/conda/etc/profile.d/conda.sh user@QUANTUM:~$ conda -V conda 4.12.0 ``` ### Use docker ### Use singularity ## Reference 1. https://docs.conda.io/projects/conda/en/latest/user-guide/install/rpm-debian.html 2. https://code.visualstudio.com/docs/remote/tunnels