Ying Jer Kao-2

Embed Size (px)

Citation preview

  • 8/17/2019 Ying Jer Kao-2

    1/90

    Uni10

    The Universal Tensor Network Library

    Yun-Da Hsieh, Ying-Jer Kao 

    Center for Advanced Study in Theoretical Scienceand Department of PhysicsNational Taiwan University

    http://www.uni10.org

    Tensor Network W

    orkshop: Algorithms and ApplicationsIOP, ACS, 2014-12-01~05

    http://www.uni10.org/

  • 8/17/2019 Ying Jer Kao-2

    2/90

    Developers

    Yun-Da Hsieh (National Taiwan University)Implementation of Uni10 (C++, CUDA, Python)

    Pochung Chen (National Tsing-Hua University)

    Design and testing

    Tama Ma (Singapore National University)

    Cross-platform build

    Sukhbinder Singh (Macquarie University)Matlab wrapper

  • 8/17/2019 Ying Jer Kao-2

    3/90

    Tensor• A tensor is a multidimensional array

       i  =   1 ,

       2 ,   3 , … . ,

       I

     j=1, 2, 3,…., J 

       k  =  1 ,

        2 ,    3 ,… . ,    K

    A(i,j,k)

    A(i,:,:)

    A(:,j,:)

    A(:,:,k)

    A(:,5,1)

    A(1,:,3)

    A(1,3,:)

  • 8/17/2019 Ying Jer Kao-2

    4/90

    Tensors in Science

    • Data analysis

    • Signal and image processing

    • Quantum Physics/Information

    • Quantum Loop Gravity

    • Quantum Chemistry

    • Bioinformatics

    • Computational neuroscience

  • 8/17/2019 Ying Jer Kao-2

    5/90

    Tensors in Science

    • Data analysis

    • Signal and image processing

    • Quantum Physics/Information

    • Quantum Loop Gravity

    • Quantum Chemistry

    • Bioinformatics

    • Computational neuroscience

  • 8/17/2019 Ying Jer Kao-2

    6/90

    Graphical Representation

  • 8/17/2019 Ying Jer Kao-2

    7/90

    Graphical Representation

    A =

    A1A2

    A3

    .

    .

    .

    AN 

    vector

    !

  • 8/17/2019 Ying Jer Kao-2

    8/90

    Graphical Representation

    A =

    A1A2

    A3

    .

    .

    .

    AN 

    vector

    !

    B  =

    B11   · · ·   B1n

    .

    .

    .

    ...

    .

    .

    .

    Bm1   · · ·   Bmn

    αβ

    ! " 

    matrix

  • 8/17/2019 Ying Jer Kao-2

    9/90

    Graphical Representation

    A =

    A1A2

    A3

    .

    .

    .

    AN 

    vector

    !

    B  =

    B11   · · ·   B1n

    .

    .

    .

    ...

    .

    .

    .

    Bm1   · · ·   Bmn

    αβ

    ! " 

    matrix

    ! " 

    rank-3 tensor

    C αβγ 

    #

  • 8/17/2019 Ying Jer Kao-2

    10/90

    Graphical Representation

    A =

    A1A2

    A3

    .

    .

    .

    AN 

    vector

    !

    B  =

    B11   · · ·   B1n

    .

    .

    .

    ...

    .

    .

    .

    Bm1   · · ·   Bmn

    αβ

    ! " 

    matrix

    ! " 

    rank-3 tensor

    C αβγ 

    #

    !1

    rank-n tensor

    α1α2α3...αn

    !2 !3…

    !n

  • 8/17/2019 Ying Jer Kao-2

    11/90

    Graphical Representation

    A =

    A1A2

    A3

    .

    .

    .

    AN 

    vector

    !

    B  =

    B11   · · ·   B1n

    .

    .

    .

    ...

    .

    .

    .

    Bm1   · · ·   Bmn

    αβ

    ! " 

    matrix

    ! " 

    rank-3 tensor

    C αβγ 

    #

    !1

    rank-n tensor

    α1α2α3...αn

    !2 !3…

    !n

    S scalar

  • 8/17/2019 Ying Jer Kao-2

    12/90

    Graphical Representation

    product of tensors (matrices)

    • Internal lines are summed over• External lines are external indices

    R

    ! " #SQ =

    Qαβ   =X

    γ 

    Rαγ S γβ

    ! " 

  • 8/17/2019 Ying Jer Kao-2

    13/90

    Graphical Representation

    product of tensors (matrices)

    • Internal lines are summed over• External lines are external indices

    R

    ! " #SQ =

    Qαβ   =X

    γ 

    Rαγ S γβ

    ! " 

    B

    A C

    D

    Tr(ABCD)

  • 8/17/2019 Ying Jer Kao-2

    14/90

    Graphical Representation

    product of tensors (matrices)

    • Internal lines are summed over• External lines are external indices

    R

    ! " #SQ =

    Qαβ   =X

    γ 

    Rαγ S γβ

    ! " 

    B

    A C

    D

    Tr(ABCD)

    i

    A B C

    ! " 

     j k 

    T ijk   =

    X

    αβ

    AαiBαβjC βk

  • 8/17/2019 Ying Jer Kao-2

    15/90

    Tensor Networks forQuantum Many-body Problems

    PEPS

    1D MERA

     

    w1   2   3   w4

    uux   y

    ρ   (lower half)

    ρ   (upper half)

     

    2D MERA

    Things get messy when fermions are involved

  • 8/17/2019 Ying Jer Kao-2

    16/90

    Tensor Contraction

    • Bookkeeping tensor indices istedious and error prone.

    • Programming fermonic systemscan be complicated

    • Minimize computation time and

    memory usage 

    • Speed up computation withcompute accelerators (GPU, MIC)

    !

    "   #

    A

    X

    β

    Aαβγ B

    βµν 

    !

    "

    #

    A

    $

    %

    BBA

  • 8/17/2019 Ying Jer Kao-2

    17/90

    HardwareCPU, GPU

    Low-Level LibrariesBLAS, LAPACK, CUDA, cuBLAS, Magma

    Matlab, C++,Fortran, Python

    Tensor Network ApplicationsDMRG, iTEBD, iPEPS, TRG, MERA, etc.

  • 8/17/2019 Ying Jer Kao-2

    18/90

    HardwareCPU, GPU

    Low-Level LibrariesBLAS, LAPACK, CUDA, cuBLAS, Magma

    Matlab, C++,Fortran, Python

    Tensor Network ApplicationsDMRG, iTEBD, iPEPS, TRG, MERA, etc.

    Uni10

    Other tensor libraries: iTensor, TNT, SCON, NCON

  • 8/17/2019 Ying Jer Kao-2

    19/90

    Uni10• Fully implemented in objected-oriented C++

    • Aimed toward applications in tensor network algorithms

    • Provides basic tensor operations with easy-to-use interface 

    • A symmetric tensor class UniTensor (Abelian symmetry) withauxiliary classes for quantum numbers, Qnum , blocks Block and

    bond labels, Bond and functions performing tensor operations.• A network class Network, where details of the graphical

    representations of the networks are processed and stored.

    • An engine to construct and analyze the contraction tree for a givennetwork.

    • A heuristic algorithm to search for an optimal binary contractionorder based on the computational and memory constraints.

    • Provides wrappers for Matlab (soon)and Python (pyUni10).

    • Supports acceleration with Nvidia Cuda based GPU.

    • Open source LGPL with cite-me license

  • 8/17/2019 Ying Jer Kao-2

    20/90

    A   !

    C

    D

    -1

    -2

    -3

    -4

    E

    F

    1

    2

    3

    4

    5

    6

    7

    8

    Network

    Network

    UniTensor   Matrix

    QnumBond Block

    getBlock()

    putBlock()

    putTensor() launch()

    UniTensor

    2

    1 3

    4

    Block

    QnumBond

    Q1

    Q2

    Q3

    QaQb Qc

    Qd

    Matrix

    UniTensor

    2

    1 3

    4

    Block

    QnumBond

    Q1

    Q2

    Q3

    QaQb Qc

    Qd

    Matrix

    UniTensor

    2

    1 3

    4

    Block

    QnumBond

    Q1

    Q2

    Q3

    QaQb Qc

    Qd

    Matrix

  • 8/17/2019 Ying Jer Kao-2

    21/90

    Spin-1 Heisenberg Model

    H    = S1

     · S2

    1

    2

    3

    4

    S2S1

    |S zi ∈ {|1i, |0i, | − 1i}

    Construct symmetric basis

  • 8/17/2019 Ying Jer Kao-2

    22/90

    1 3

    4

    |1>|0>|-1>

    |1>|0>|-1>

  • 8/17/2019 Ying Jer Kao-2

    23/90

    1 3

    4

    |1>|0>|-1>

    |1>|0>|-1>

    1 3

    4

    Sz=1

    q#

    q#

  • 8/17/2019 Ying Jer Kao-2

    24/90

    Qnum q0(0), q1(1), qm1(-1);

    Bond bdr(BD_IN, [qm1, q0, q1]);

    Bond bdc(BD_OUT, [qm1, q0, q1]);

    UniTensor T([bdr, bdr, bdc, bdc]);

    1 3

    4

    q#

    q#

    raw element block element

    T.addRawElem(raw)

  • 8/17/2019 Ying Jer Kao-2

    25/90

    3

    4

    5

    6

    1

    2

    Ta Tb

    Ta * Tb

    Ta.addLabel([1, 2, 3, 4]);

    Tb.addLabel([3, 4, 5, 6]);

  • 8/17/2019 Ying Jer Kao-2

    26/90

    UniTensor

    • Operation• Tc = Ta * Tb;

    •Tc = 2.13 * Ta;

    • Tc = Ta + Tb;

    • permute() and transpose()

    •I / O

    • write: Ta.save(“out”);

    • read: UniTensor Ta(“out”);

    • print: cout

  • 8/17/2019 Ying Jer Kao-2

    27/90

    UniTensor

    • Operation• Tc = Ta * Tb;

    •Tc = 2.13 * Ta;

    • Tc = Ta + Tb;

    • permute() and transpose()

    •I / O

    • write: Ta.save(“out”);

    • read: UniTensor Ta(“out”);

    • print: cout

  • 8/17/2019 Ying Jer Kao-2

    28/90

    Symmetries

    U(1)

    • Total Sz (spin systems)

    • Total particle number (fermionic/bosonic systems)

    Z2

    • Parity

    • Key to fermionic system

  • 8/17/2019 Ying Jer Kao-2

    29/90

    Fermionic system

    C1† C2† |0> = -C2† C1† |0>

    |1,1> = - |1,1>

    minus sign

  • 8/17/2019 Ying Jer Kao-2

    30/90

          A|0>

    |1>

    |0>

    |1>1

    2

    4

    3

    p = 0

    p = 1

    Particle parity

  • 8/17/2019 Ying Jer Kao-2

    31/90

    0,0> 0,1> 1,0> 1,1>

    0,0> 1   ! ! 2

    0,1>   ! 3 4   !

    1,0>   ! 5 6   !

    1,1> 7   ! ! 8

          A|0>

    |1>

    |0>

    |1>1

    2

    4

    3

    p = 0

    p = 1

    Particle parity

  • 8/17/2019 Ying Jer Kao-2

    32/90

    Ta * Tb

          A

    1

    2

    3

    4

          B

    5

    6

    minus sign!

    4

    3

  • 8/17/2019 Ying Jer Kao-2

    33/90

          A

    1

    2

          B

    5

    6

    minus sign!

    3

    4

    [1, 2, 4, 3] [3, 4, 5, 6]

    Before contraction:

    Ta.permute([1, 2, 3, 4], 2)

    [1, 2, 4, 3] —> [1, 2, 3, 4]

    Ta * Tb

    4

    3

  • 8/17/2019 Ying Jer Kao-2

    34/90

    0,0> 0,1> 1,0> 1,1>

    0,0> 1   ! ! 2

    0,1>   ! 3 4   !

    1,0>   ! 5 6   !

    1,1> 7   ! ! 8

          A|0>

    |1>

    |0>

    |1>1

    2

    4

    3

  • 8/17/2019 Ying Jer Kao-2

    35/90

    0,0> 0,1> 1,0> 1,1>

    0,0> 1   ! ! -2

    0,1>   ! 3 4   !

    1,0>   ! 5 6   !

    1,1> 7   ! ! -8

    swap gates are added in permute()

          A|0>

    |1>

    |0>

    |1>1

    2

    4

    3

  • 8/17/2019 Ying Jer Kao-2

    36/90

    UniTensor & Matrix

    • Interactions:• T.qnums();

    • T.getBlock(q3);

    • T.putBlock(q3);

    • Matrix operations:• M.eigh();

    • M.svd();

    • Mc = Ma * Mb;

    • M.transpose();

    getBlock(q3) putBlock(q3)

    1 3

    4

    q1q2

    q3

    q4

    "U VT

    svd()

    U * " * VT

  • 8/17/2019 Ying Jer Kao-2

    37/90

    Network

    File for network connection: demo.txt

    C: -1; 7 1D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6

    E: 7 5; -3F: 6 8; -4ABCDEF

    Network net(“demo.txt”)

    A1

    2

    3

    4

    !

    5

    6

    C7-1

    D8

    -2

    E-3

    F -4

  • 8/17/2019 Ying Jer Kao-2

    38/90

    Network

    C: -1; 7 1D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6

    E: 7 5; -3F: 6 8; -4ABCDEF

    net

    A1

    2

    3

    4

    !

    5

    6

    C7-1

    D8

    -2

    E-3

    F -4

  • 8/17/2019 Ying Jer Kao-2

    39/90

    Network - putTensor

    net.putTensor(0, C);

    C: -1; 7 1D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6

    E: 7 5; -3F: 6 8; -4ABCDEF

    net

    A1

    2

    3

    4

    !

    5

    6

    C7-1

    D8

    -2

    E-3

    F -4

    012345

  • 8/17/2019 Ying Jer Kao-2

    40/90

    Network - putTensor

    net.putTensor(2, A);

    C: -1; 7 1D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6

    E: 7 5; -3F: 6 8; -4ABCDEF

    net

    A1

    2

    3

    4

    !

    5

    6

    C7-1

    D8

    -2

    E-3

    F -4

    012345

  • 8/17/2019 Ying Jer Kao-2

    41/90

    Network - launch

    Tresult = net.launch();

    C: -1; 7 1D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4ABCDEF

    A1

    2

    3

    4

    !

    5

    6

    C7-1

    D8

    -2

    E-3

    F -4

    net

  • 8/17/2019 Ying Jer Kao-2

    42/90

    Network - reusable

    net.putTensor(3, B’)Tresult = net.launch();

    C: -1; 7 1D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6

    E: 7 5; -3F: 6 8; -4ABCDEF

    net

    A1

    2

    3

    4

    !’5

    6

    C7-1

    D8

    -2

    E-3

    F -4

    0123

    45

  • 8/17/2019 Ying Jer Kao-2

    43/90

    Contraction order

    C: -1; 7 1D: -2; 2 8

    A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4

    CDABEF

          A1

    2

    3

    4       !

    5

    6

          C7-1

          D8

    -2

          E-3

          F-4

    Finding the optimal contraction order for a generaltensor network is NP-hard

    C.-C. Lam, et al.,Parallel Processing Letters 07, 157 (1997).

  • 8/17/2019 Ying Jer Kao-2

    44/90

    Contraction order

    C: -1; 7 1D: -2; 2 8

    A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4

    CDABEF

          A1

    2

    3

    4       !

    5

    6

          C7-1

          D8

    -2

          E-3

          F-4

    Finding the optimal contraction order for a generaltensor network is NP-hard

    C.-C. Lam, et al.,Parallel Processing Letters 07, 157 (1997).

    Using heuristics

  • 8/17/2019 Ying Jer Kao-2

    45/90

    A   B

    C

    E   FD

    Network - launch

    (((A * B) * C) * E) * (D * F)

    C: -1; 7 1

    D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3

    F: 6 8; -4

    CDABEF

  • 8/17/2019 Ying Jer Kao-2

    46/90

    A   B

    C

    E   FD

    Network - launch

    (((A * B) * C) * E) * (D * F)

    C: -1; 7 1

    D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3

    F: 6 8; -4

    net.launch() CDABEF

  • 8/17/2019 Ying Jer Kao-2

    47/90

    A   B

    C

    E   FD

    Network - launch

    (((A * B) * C) * E) * (D * F)

    C: -1; 7 1

    D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3

    F: 6 8; -4

    net.launch() CDABEF

    Using heuristics to generate

    an “optimal” binary contraction tree

  • 8/17/2019 Ying Jer Kao-2

    48/90

    Why binary?

    Cost: abclmn

    A

    B   C

    a

    b c

    l

    m

    n

    Dabc   =

    X

    lmn

    AalnBbmlC cnm

  • 8/17/2019 Ying Jer Kao-2

    49/90

    A

    B   C

    a

    b c

    lm

    n

    pairwise contractions

    A

    B   C

    Cost: b c l m n + a b c l n

    Cost: a b c l m n

    (pairwise)

    (direct sum)

    pairwise is better if: (1 / a + 1 / m) < 1

  • 8/17/2019 Ying Jer Kao-2

    50/90

    A

    B   C

    a

    b c

    lm

    n

    pairwise contractions

    A

    B   C

    (pairwise)

    (direct sum)b c l n

    Cost: b c l m n + a b c l n

    Cost: a b c l m n

    pairwise is better if: (1 / a + 1 / m) < 1

    Intermediatetensor

  • 8/17/2019 Ying Jer Kao-2

    51/90

    A

    B   C

    a

    b c

    l

    m

    n

    pairwise contractions

    A

    B   C

    B

    C   A

    C

    A   B

    (1 / a + 1 / m) (1 / b + 1 / n) (1 / c + 1 / l )

    b c l n a c l m a b m n

    Time

    Space

  • 8/17/2019 Ying Jer Kao-2

    52/90

    A B C D E F G

    B D E A C F G

    A G C FD EB

    Nz

    Nx Ny

    getCost(Nz) =min( Cost(Nx * Ny) + getCost(Nx) + getCost(Ny) )

    For all possible (Nx, Ny)(2n−1−

    1)

    n!(n− 1)!

    2n−1Total:

    Pfeifer et al., arXiv:1304.6112(2013)

    a

  • 8/17/2019 Ying Jer Kao-2

    53/90

    A

    B   C

    a

    b c

    l

    m

    n

    pairwise contractions

    A

    B   C

    B

    C   A

    C

    A   B

    (1 / a + 1 / m) (1 / b + 1 / n) (1 / c + 1 / l )

    b c l n a c l m a b m n

    Time

    Space

    Assume:a=b=c

    a

  • 8/17/2019 Ying Jer Kao-2

    54/90

    A

    B   C

    a

    b c

    l

    m

    n

    pairwise contractions

    A

    B   C

    Efficiency of B * C:(ElemNum(B) + ElemNum(C)) / ElemNum(B * C)

    B * C: (lmb + nmc) / lnbc= m / nc + m / lb

  • 8/17/2019 Ying Jer Kao-2

    55/90

    Network

    C: -1; 7 1D: -2; 2 8

    A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4

    CDABEF

    A

    2  

     3  4  

    !

     5   6  

    C

    7  

    -1  

    D

     8  

    -2  

    E- 3  

    F-4  Optimal contraction order: NP-hard

  • 8/17/2019 Ying Jer Kao-2

    56/90

    Network

    C: -1; 7 1D: -2; 2 8

    A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4

    CDABEF

    A

    2  

     3  4  

    !

     5   6  

    C

    7  

    -1  

    D

     8  

    -2  

    E- 3  

    F-4  Use human intelligence

  • 8/17/2019 Ying Jer Kao-2

    57/90

    Network

    C: -1; 7 1D: -2; 2 8

    A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4

    CDABEF

    A

    2  

     3  4  

    !

     5   6  

    C

    7  

    -1  

    D

     8  

    -2  

    E- 3  

    F-4  

    ORDER: ABCEDF

    Give a suggested sequence of contraction

    Use human intelligence

  • 8/17/2019 Ying Jer Kao-2

    58/90

    O[log(n)] ~ O[n]n!(n− 1)!

    2n−1

    A   B

    C

    E   FD

    ORDER: ABCEDF

    Not always optimal, but the algorithm is fast,

    and several trials can give a better sequence.

  • 8/17/2019 Ying Jer Kao-2

    59/90

    Network - launch

    A        1   2

            3   4

    !

            5   6

    C

            7

        -        1

    D

            8

        -        2

    E

        -        3

    F

        -        4

    ABCDEF

  • 8/17/2019 Ying Jer Kao-2

    60/90

    Network - launch

    A        1   2

            3   4

    !

            5   6

    C

            7

        -        1

    D

            8

        -        2

    E

        -        3

    F

        -        4

    ABCDEF

    A   B

  • 8/17/2019 Ying Jer Kao-2

    61/90

    C

    Network - launch

    A        1   2

            3   4

    !

            5   6

    C

            7

        -        1

    D

            8

        -        2

    E

        -        3

    F

        -        4

    ABCDEF

    A   B

  • 8/17/2019 Ying Jer Kao-2

    62/90

    D

    C

    Network - launch

    A        1   2

            3   4

    !

            5   6

    C

            7

        -        1

    D

            8

        -        2

    E

        -        3

    F

        -        4

    ABCDEF

    A   B

  • 8/17/2019 Ying Jer Kao-2

    63/90

    E

    D

    C

    Network - launch

    A        1   2

            3   4

    !

            5   6

    C

            7

        -        1

    D

            8

        -        2

    E

        -        3

    F

        -        4

    ABCDEF

    A   B

  • 8/17/2019 Ying Jer Kao-2

    64/90

    Network - launch

    ABCDEF

    E D

    C

    A   B

    A        1   2

            3   4

    !

            5   6

    C

            7

        -        1

    D

            8

        -        2

    E

        -        3

    F

        -        4

  • 8/17/2019 Ying Jer Kao-2

    65/90

    Network - launch

    ABCDEF

    D

    E

    C

    A   B

    A        1   2

            3   4

    !

            5   6

    C

            7

        -        1

    D

            8

        -        2

    E

        -        3

    F

        -        4

  • 8/17/2019 Ying Jer Kao-2

    66/90

    A   B

    C

    E   FD

    Network - launch

    ABCDEF

    (((A * B) * C) * E) * (D * F)

    A        1   2

            3   4

    !

            5   6

    C

            7

        -        1

    D

            8

        -        2

    E

        -        3

    F

        -        4

  • 8/17/2019 Ying Jer Kao-2

    67/90

    A   B

    C

    E   FD

    Network - launch

    C: -1; 7 1

    D: -2; 2 8A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4

    net.launch()

    CDABEF

    ORDER: (((A * B) * C) * E) * (D * F)

  • 8/17/2019 Ying Jer Kao-2

    68/90

    A   B

    C

    E   FD

    Network - launch

    (((A * B) * C) * E) * (D * F)

    C: -1; 7 1D: -2; 2 8

    A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4ABCDEF

  • 8/17/2019 Ying Jer Kao-2

    69/90

    A   B

    C

    E   FD

    Network - launch

    (((A * B) * C) * E) * (D * F)

    C: -1; 7 1D: -2; 2 8

    A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4ABCDEF

    for fermionic systemCDABEF != ABCEDF

  • 8/17/2019 Ying Jer Kao-2

    70/90

    A   B

    C

    E   FD

    Network - launch

    (((A * B) * C) * E) * (D * F)

    C: -1; 7 1D: -2; 2 8

    A: 1 2; 3 4B: 3 4; 5 6E: 7 5; -3F: 6 8; -4ABCDEF

    for fermionic systemCDABEF != ABCEDF

    CDABEF = net.launch()

    E l C T f M t i

  • 8/17/2019 Ying Jer Kao-2

    71/90

    Example: Corner Transfer Matrix

    h  ÔiRomán Orús and Guifré Vidal, PRB 80, 094403 (2009)

    • Used in iPEPS toestimate the environment

    • Different bond dims•   $  bd: boundary index •   $ int: internal index • d : physical index

    • Expectation value of an

    operator

    CTM

    http://ctm.net/

  • 8/17/2019 Ying Jer Kao-2

    72/90

    CTM.net

    C1: 1 2C2: 34 35

    C3: 41 42

    C4: 19 16

    T1b: 1 20 3 4

    T1a: 20 34 21 22

    T2a: 35 38 36 37

    T2b: 38 41 39 40

    T3b: 42 33 31 32

    T3a: 33 19 17 18

    T4a: 16 13 14 15

    T4b: 13 2 5 6

     A1: 4 24 10 6 8

     A1T: 3 23 9 5 7

    B1: 22 37 27 24 25

    B1T: 21 36 26 23 25

     A2: 27 40 32 29 30

     A2T: 26 39 31 28 30

    B2: 10 29 18 15 12

    B2T: 9 28 17 14 11O: 7 8 11 12

    TOUT:

    ORDER: C1 T1b T4b A1T A1 O B2T B2 T4a C4 T3a T1a B1T B1 A2T A2 T3b C2 T2a T2b C3

    http://ctm.net/

  • 8/17/2019 Ying Jer Kao-2

    73/90

    Memory Requirement: 37846846304

    Sum of memory usage: 47505684008

    Maximun tensor:

      elemNum: 4304672100

      10 bonds and labels: 20, 13, 23, 24, 28, 17, 14, 29, 18, 15,

     ((((((((((((((((((((C1 T1b) T4b) A1T) A1) O) B2T)

     B2) T4a) C4) T3a) T1a) B1T) B1) A2T) A2) T3b) C2) T2a) T2b) C3)

  • 8/17/2019 Ying Jer Kao-2

    74/90

    Memory Requirement: 6810336800

    Sum of memory usage: 16039257608

    Maximun tensor:

      elemNum: 425152800

      9 bonds and labels: 20, 13, 23, 24, 10, 12, 28, 17, 14,

  • 8/17/2019 Ying Jer Kao-2

    75/90

    Memory Requirement: 6810336800

    Sum of memory usage: 16039257608

    Maximun tensor:

      elemNum: 425152800

      9 bonds and labels: 20, 13, 23, 24, 10, 12, 28, 17, 14,

    Memory Requirement: 37846846304

    Sum of memory usage: 47505684008

    Maximun tensor:

      elemNum: 4304672100

      10 bonds and labels: 20, 13, 23, 24, 28, 17, 14, 29, 18, 15,

    Memory Requirement:6 810 336 800 / 37 846 846 304 =

    0.17994463119

    Total Memory Usage

    16 039 257 608 / 47 505 684 008 =0.33762817951

  • 8/17/2019 Ying Jer Kao-2

    76/90

       M  e  m  o  r  y

       U  s  a  g  e

    Bond Dimension

    8

    "! 

    7

    Courtesy: Marc Ziegler @ U Mainz

    C d S l MERA

  • 8/17/2019 Ying Jer Kao-2

    77/90

    Code Sample: MERA

    !" 

    !#  !$ 

    !% 

    !"  !% 

    !#  !$ 

    %  ' 

    *  + 

    "& ""

     

    w1   w2

    w†2

    w†1

    u†

    u

    Ascending operator:renormalization of a two-site operator

    C d S l MERA

  • 8/17/2019 Ying Jer Kao-2

    78/90

    !" 

    !#  !$

     

    !% 

    #  ( 

    "&  ""

     

    w1   w2

    w†2

    w†1

    u†

    u Qnum q10(1, PRT_EVEN);

    Qnum q_10(-1, PRT_EVEN);

    Qnum q30(3, PRT_EVEN);

    Qnum q_11(PRTF_ODD, -1, PRT_EVEN);

    Qnum q11(PRTF_ODD, 1, PRT_EVEN);

    Qnum q_31(PRTF_ODD, -3, PRT_EVEN);

    #include "uni10.hpp"

    Define quantum numbers

    Code Sample: MERA

    Code Sample: MERA

  • 8/17/2019 Ying Jer Kao-2

    79/90

    !" 

    !#  !$

     

    !% 

    #  ( 

    "&  "" 

    w1   w2

    w†

    2w

    1

    u†

    u

    vector bonds;

    vector qnums;

    qnums.push_back(q10);

    qnums.push_back(q_11);

    Bond bdr(BD_IN, qnums);Bond bdc(BD_OUT, qnums);

    bonds.push_back(bdr);

    bonds.push_back(bdr);

    bonds.push_back(bdc);

    bonds.push_back(bdc);

    Assign quantum numbers to bonds

    Code Sample: MERA

    Code Sample MERA

  • 8/17/2019 Ying Jer Kao-2

    80/90

    !" 

    !#  !$

     

    !% 

    #  ( 

    "&  "" 

    w1   w2

    w†

    2w

    1

    u†

    u

    Define Hamiltonian operator

    double H_elem[] = {1.0/4, 0, 0, 0,

      0, -1.0/4, 1.0/2, 0,  0, 1.0/2, -1.0/4, 0,

      0, 0, 0, 1.0/4};

    UniTensor H0(bonds, "Ob");

    H0.addRawElem(H_elem);

    Code Sample: MERA

    Code Sample MERA

  • 8/17/2019 Ying Jer Kao-2

    81/90

    !" 

    !#  !$

     

    !% 

    #  ( 

    "&  "" 

    w1   w2

    w†

    2w

    1

    u†

    u

    vector qnums1;qnums1.push_back(q30);

    qnums1.push_back(q11);

    qnums1.push_back(q11);

    qnums1.push_back(q11);

    qnums1.push_back(q_10);

    qnums1.push_back(q_10);

    qnums1.push_back(q_10);

    qnums1.push_back(q_31);

    Bond bdr1(BD_IN, qnums1);

    bonds.clear();

    bonds.push_back(bdr1);

    bonds.push_back(bdc);

    bonds.push_back(bdc);

    bonds.push_back(bdc);

    UniTensor W1(bonds, "W1");

    W1.orthoRand();

    UniTensor W1T = W1;

    W1T.transpose();

    Code Sample: MERA

    Define w, w† 

    Code Sample: MERA

  • 8/17/2019 Ying Jer Kao-2

    82/90

    !" 

    !#  !$

     

    !% 

    #  ( 

    "&  "" 

    w1   w2

    w

    †2w

    †1

    u†

    u

    vector tens;

    tens.push_back(&W1);

    tens.push_back(&W2);

    tens.push_back(&U);

    tens.push_back(&H0);tens.push_back(&UT);

    tens.push_back(&W1T);

    tens.push_back(&W2T);

    UniTensor H1, H2;

    Network asdL(“AscendL.net", tens);

    H1 = asdL.launch();

    Code Sample: MERA

    Assign tensors into network

    Code Sample: MERA

  • 8/17/2019 Ying Jer Kao-2

    83/90

    !" 

    !#  !$

     

    !% 

    #  ( 

    "&  "" 

    w1   w2

    w†

    2

    w†

    1

    u†

    u

    W1: -1; 0 1 3

    W2: -2; 7 10 11

    U: 3 7; 4 8Ob: 1 4; 2 5

    UT: 5 8; 6 9

    W1T: 0 2 6; -3

    W2T: 9 10 11; -4

    TOUT:-1 -2; -3 -4

    ORDER: (W1T ((W1 (Ob ((W2 * W2T) ( U, UT))))) )

    AscendL.net

    Code Sample: MERA

    Code Sample: MERA

  • 8/17/2019 Ying Jer Kao-2

    84/90

    !" 

    !#  !$

     

    !% 

    #  ( 

    "&  "" 

    w1   w2

    w†

    2

    w†

    1

    u†

    u asdL.putTensor(0, &W1);

    asdL.putTensor(1, &W2);asdL.putTensor(2, &U);

    asdL.putTensor(3, &H0);

    asdL.putTensor(4, &UT);

    asdL.putTensor(5, &W1T);

    asdL.putTensor(6, &W2T);

    H2 = asdL.launch();

  • 8/17/2019 Ying Jer Kao-2

    85/90

    pyUni10

    • Programming in C++ is too hardcore.

    • Need something that even a layman knows how toprogram.

    • Take advantage of the beauty of Python.

    •   pyUni10: Wrapping the power of Uni10 with aeasy-to-program Python interface.

    A l ti ith GPU

  • 8/17/2019 Ying Jer Kao-2

    86/90

    Acceleration with GPU

    GPU CPU

    !

    "

    #

    AA$

    %

    BB"

    A l ti ith GPU

  • 8/17/2019 Ying Jer Kao-2

    87/90

    Acceleration with GPU

    GPU CPU

    !

    #

    AA * B$

    %

    Switching from CPU to GPU versionwithout any change in your functions

    Unified API

    Uni10

  • 8/17/2019 Ying Jer Kao-2

    88/90

    Uni10• Geared toward tensor network algorithms

    • Reduce development time

    • Behind-the-scene optimization

    • Support for Python (pyUni10) and Matlab (soon)

    • To do:

    • GUI tools for network generation

    • Non-abelian symmetries: SU(2)• OpenCL, MIC, Multi-GPU/Multi-node support

    • Better search algorithm for contraction order (TensorContraction Engine, etc.)

    http://uni10.org

    N t k

    http://uni10.org/

  • 8/17/2019 Ying Jer Kao-2

    89/90

    A   !

    C

    D

    -1

    -2

    -3

    -4

    E

    F

    1

    2

    3

    4

    5

    6

    7

    8

    Network

    Network

    UniTensor   Matrix

    QnumBond Block

    getBlock()

    putBlock()

    putTensor() launch()

    UniTensor

    2

    1 3

    4Block

    QnumBond

    Q1

    Q2

    Q3

    QaQb Qc

    Qd

    Matrix

    UniTensor

    2

    1 3

    4Block

    QnumBond

    Q1

    Q2

    Q3

    QaQb Qc

    Qd

    Matrix

    UniTensor

    2

    1 3

    4Block

    QnumBond

    Q1

    Q2

    Q3

    QaQb Qc

    Qd

    Matrix

    Memory Hierarchy

  • 8/17/2019 Ying Jer Kao-2

    90/90

    Memory Hierarchy 

    "#$% '('$)*

    ")+, -

    .#$/0 123 45.#$/0 143 45.#$/0 1-3 45

    .#$/0 123 -5.#$/0 143 -5.#$/0 1-3 -5

    ")+, 4

    .#$/0 143 45

    .#$/0 143 -5

    .#$/0 143 25

    .#$/0 1-3 45

    .#$/0 1-3 -5

    .#$/0 1-3 25

    67)(&, .#$/0

    8()9%#$/0 :7&)(,

    '('$)*

    67)(&,

    8()9;7)(&, #$/

    '('$)*