Commit db881c31 authored by Dmitry I. Lyakh's avatar Dmitry I. Lyakh
Browse files

Fixed the ExaTN-Gen visitor convergence for tree tensor networks

parent ba3d25cb
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -13,18 +13,20 @@ int main(int argc, char **argv) {
    // Initialize:
    xacc::Initialize(argc, argv);
    xacc::set_verbose(true);
    //xacc::logToFile(true);
    //xacc::setLoggingLevel(1);
    xacc::logToFile(true);
    xacc::setLoggingLevel(1);

    // Get Accelerator backend:
    auto accelerator_qpp = xacc::getAccelerator("qpp");
    auto accelerator_tnqvm_gen = xacc::getAccelerator("tnqvm",
                                 {{"tnqvm-visitor", "exatn-gen:float"},
                                  {"exatn-buffer-size-gb", 2},
                                  {"reconstruct-layers", 4},
                                  {"reconstruct-tolerance", 1e-5},
                                  {"max-bond-dim", 32}});
    auto accelerator = accelerator_qpp;
                                 {{"tnqvm-visitor", "exatn-gen:double"},
                                  {"exatn-buffer-size-gb", 4},
                                  {"reconstruct-layers", 6},
                                  {"reconstruct-tolerance", 1e-6},
                                  {"max-bond-dim", 4},
                                  {"reconstruct-builder", "TTN"},
                                  {"exatn-contract-seq-optimizer", "cutnn"}});
    auto accelerator = accelerator_tnqvm_gen;

    // Read Source file:
    std::ifstream inFile;
+10 −8
Original line number Diff line number Diff line
@@ -13,18 +13,20 @@ int main(int argc, char **argv) {
    // Initialize:
    xacc::Initialize(argc, argv);
    xacc::set_verbose(true);
    //xacc::logToFile(true);
    //xacc::setLoggingLevel(1);
    xacc::logToFile(true);
    xacc::setLoggingLevel(1);

    // Get Accelerator backend:
    auto accelerator_qpp = xacc::getAccelerator("qpp");
    auto accelerator_tnqvm_gen = xacc::getAccelerator("tnqvm",
                                 {{"tnqvm-visitor", "exatn-gen:float"},
                                  {"exatn-buffer-size-gb", 2},
                                  {"reconstruct-layers", 4},
                                  {"reconstruct-tolerance", 1e-5},
                                  {"max-bond-dim", 32}});
    auto accelerator = accelerator_qpp;
                                 {{"tnqvm-visitor", "exatn-gen:double"},
                                  {"exatn-buffer-size-gb", 4},
                                  {"reconstruct-layers", 8},
                                  {"reconstruct-tolerance", 1e-6},
                                  {"max-bond-dim", 32},
                                  {"reconstruct-builder", "TTN"},
                                  {"exatn-contract-seq-optimizer", "cutnn"}});
    auto accelerator = accelerator_tnqvm_gen;

    // Read Source file:
    std::ifstream inFile;
+16 −6
Original line number Diff line number Diff line
@@ -722,7 +722,10 @@ void ExatnGenVisitor<TNQVM_COMPLEX_TYPE>::reconstructCircuitTensor(bool forced)
    auto &networkBuildFactory = *(exatn::numerics::NetworkBuildFactory::get());
    auto builder = networkBuildFactory.createNetworkBuilderShared(m_reconstructBuilder);
    builder->setParameter("max_bond_dim", m_maxBondDim);
    if(m_reconstructBuilder == "TTN") builder->setParameter("arity", 2);
    if(m_reconstructBuilder == "TTN"){
      builder->setParameter("arity", 2);
      builder->setParameter("isometric", 1);
    }
    auto approximant = [&]() {
      if (m_initReconstructionRandom || !m_previousOptExpansion) {
        auto approximantTensorNetwork =
@@ -755,8 +758,8 @@ void ExatnGenVisitor<TNQVM_COMPLEX_TYPE>::reconstructCircuitTensor(bool forced)

    bool success = exatn::balanceNormalizeNorm2Sync(*target, 1.0, 1.0, false);
    assert(success);
    success = exatn::balanceNormalizeNorm2Sync(*approximant, 1.0, 1.0, true);
    assert(success);
    //success = exatn::balanceNormalizeNorm2Sync(*approximant, 1.0, 1.0, true);
    //assert(success);
    exatn::TensorNetworkReconstructor reconstructor(target, approximant,
                                                    m_reconstructTol);
    // std::cout << "Target: \n";
@@ -766,11 +769,18 @@ void ExatnGenVisitor<TNQVM_COMPLEX_TYPE>::reconstructCircuitTensor(bool forced)
    // Run the reconstructor:
    bool reconstructSuccess = exatn::sync();
    assert(reconstructSuccess);
    exatn::TensorNetworkReconstructor::resetDebugLevel(1,0); //debug
    //exatn::TensorNetworkReconstructor::resetDebugLevel(1,0); //debug
    bool nesterov = true, iso_solver = false;
    if(m_reconstructBuilder == "TTN"){
      nesterov = false;
      iso_solver = true;
      reconstructor.resetLearningRate(1e3);
    }else{
      reconstructor.resetLearningRate(1.0);
    }
    double residual_norm, fidelity;
    const auto startOpt = std::chrono::system_clock::now();
    bool reconstructed = reconstructor.reconstruct(&residual_norm, &fidelity, true);
    bool reconstructed = reconstructor.reconstruct(&residual_norm, &fidelity, true, nesterov, iso_solver);
    reconstructSuccess = exatn::sync(); assert(reconstructSuccess);
    if (reconstructed) {
      const auto endOpt = std::chrono::system_clock::now();