From b8e501769f2a72e0ccfad385e69d202bd989d316 Mon Sep 17 00:00:00 2001 From: heyyuhao Date: Mon, 22 May 2023 15:10:35 +0800 Subject: [PATCH 1/2] added implementation for paper Approximate_Weighted_C_R_Coded_Matrix_Multiplication --- test/CMakeLists.txt | 2 +- test/SystemTest/WeightedCRTest.cpp | 56 ++++++++++++++ test/scripts/config_WeightedCR.csv | 6 ++ test/torchscripts/WeightedCR.py | 113 +++++++++++++++++++++++++++++ test/torchscripts/weightedCR.pt | Bin 0 -> 10592 bytes 5 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 test/SystemTest/WeightedCRTest.cpp create mode 100644 test/scripts/config_WeightedCR.csv create mode 100644 test/torchscripts/WeightedCR.py create mode 100644 test/torchscripts/weightedCR.pt diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index f1fa57db..0d709fd6 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -21,6 +21,6 @@ endmacro() add_catch_test(cpp_test SystemTest/SimpleTest.cpp IntelliStream) add_catch_test(sketch_test SystemTest/SketchTest.cpp IntelliStream) add_catch_test(crs_test SystemTest/CRSTest.cpp IntelliStream) - +add_catch_test(weighted_cr_test SystemTest/WeightedCRTest.cpp IntelliStream) diff --git a/test/SystemTest/WeightedCRTest.cpp b/test/SystemTest/WeightedCRTest.cpp new file mode 100644 index 00000000..80e03641 --- /dev/null +++ b/test/SystemTest/WeightedCRTest.cpp @@ -0,0 +1,56 @@ +#include + +#define CATCH_CONFIG_MAIN +#include "catch.hpp" +#include +using namespace std; +using namespace INTELLI; +using namespace torch; +void runSingleThreadTest(std::string configName) { + ConfigMapPtr cfg = newConfigMap(); + cfg->fromFile(configName); + AMMBench::MatrixLoaderTable mLoaderTable; + uint64_t sketchDimension; + sketchDimension = cfg->tryU64("sketchDimension", 50, true); + uint64_t coreBind = cfg->tryU64("coreBind", 0, true); + UtilityFunctions::bind2Core((int) coreBind); + torch::set_num_threads(1); + std::string ptFile = cfg->tryString("ptFile", "torchscripts/WeightedCR.pt", true); + + //uint64_t customResultName = cfg->tryU64("customResultName", 0, true); + INTELLI_INFO("Place me at core" + to_string(coreBind)); + INTELLI_INFO( + "with sketch" + to_string(sketchDimension)); + torch::jit::script::Module module; + INTELLI_INFO("Try pt file " + ptFile); + module = torch::jit::load(ptFile); + std::string matrixLoaderTag = cfg->tryString("matrixLoaderTag", "random", true); + auto matLoaderPtr = mLoaderTable.findMatrixLoader(matrixLoaderTag); + assert(matLoaderPtr); + matLoaderPtr->setConfig(cfg); + auto A = matLoaderPtr->getA(); + auto B = matLoaderPtr->getB(); + /*torch::manual_seed(114514); +//555 +auto A = torch::rand({(long) aRow, (long) aCol}); +auto B = torch::rand({(long) aCol, (long) bCol});*/ + INTELLI_INFO("Generation done, conducting..."); + ThreadPerf pef((int) coreBind); + pef.setPerfList(); + pef.start(); + auto C =module.forward({A, B, (long) sketchDimension}).toTensor(); + pef.end(); + std::string ruName = "default"; + + auto resultCsv = pef.resultToConfigMap(); + resultCsv->toFile(ruName + ".csv"); + INTELLI_INFO("Done. here is result"); + std::cout << resultCsv->toString() << endl; +} +TEST_CASE("Test the COLUMN ROW SAMPLINGS", "[short]") +{ + int a = 0; + runSingleThreadTest("scripts/config_WeightedCR.csv"); + // place your test here + REQUIRE(a == 0); +} \ No newline at end of file diff --git a/test/scripts/config_WeightedCR.csv b/test/scripts/config_WeightedCR.csv new file mode 100644 index 00000000..b6afe1ef --- /dev/null +++ b/test/scripts/config_WeightedCR.csv @@ -0,0 +1,6 @@ +key,value,type +aRow,100,U64 +aCol,1000,U64 +bCol,500,U64 +sketchDimension,25,U64 +ptFile,torchscripts/CRS.pt,String \ No newline at end of file diff --git a/test/torchscripts/WeightedCR.py b/test/torchscripts/WeightedCR.py new file mode 100644 index 00000000..e0a869b6 --- /dev/null +++ b/test/torchscripts/WeightedCR.py @@ -0,0 +1,113 @@ +import torch +import time + +@torch.jit.script +def CR(A: torch.Tensor, B: torch.Tensor, c: int) -> torch.Tensor: + """CR algorithm https://www.stat.berkeley.edu/~mmahoney/pubs/matrix1_SICOMP.pdf + + Args: + A (torch.Tensor): matrix A + B (torch.Tensor): matrix B + c (int): number of sampling + + Returns: + torch.Tensor: CR approximation matrix + """ + torch.manual_seed(0) + + _, n = A.shape + + # probability distribution + probability_distribution = torch.zeros((n)) + for i in range(n): + probability_distribution[i] = torch.norm(A.T[i], p='fro')*torch.norm(B[i], p='fro') + probability_distribution /= probability_distribution.sum() + + # S + S = torch.zeros((n, c)) + sample_indices = torch.multinomial(probability_distribution, c, replacement=True) + + for trial, index in enumerate(sample_indices): + S[int(index.item())][trial]=1 + + # D + D = torch.diag(1/torch.sqrt(c*probability_distribution[sample_indices])) + + # ASD(SD)^TB + SS = torch.matmul(S, D) + C = torch.matmul(A, SS) + R = torch.matmul(SS.T, B) + CR = torch.matmul(C, R) + + return CR + + +@torch.jit.script +def weighted_CR(A: torch.Tensor, B: torch.Tensor, c: int): + """weighted CR algorithm https://arxiv.org/abs/2011.09709 + + Args: + A (torch.Tensor): matrix A + B (torch.Tensor): matrix B + c (int): number of sampling + + Returns: + torch.Tensor: weighted CR approximation matrix + """ + torch.manual_seed(0) + + _, n = A.shape + + # probability distribution + probability_distribution = torch.zeros((n)) + for i in range(n): + probability_distribution[i] = torch.norm(A.T[i], p='fro')*torch.norm(B[i], p='fro') + probability_distribution /= probability_distribution.sum() + + # S + sample_indices = torch.multinomial(probability_distribution, c, replacement=True) + unique_indices, occurences = torch.unique(sample_indices, return_counts=True) + + S = torch.zeros((n, len(unique_indices))) + + for trial, index in enumerate(unique_indices): + S[int(index.item())][trial]=1 + + # D + D = torch.diag(torch.sqrt(occurences)/torch.sqrt(c*probability_distribution[unique_indices])) + + # ASD(SD)^TB + SS = torch.matmul(S, D) + C = torch.matmul(A, SS) + R = torch.matmul(SS.T, B) + weighted_CR = torch.matmul(C, R) + + return weighted_CR + + +def main(): + A = torch.rand(10000, 1000) + B = torch.rand(1000, 5000) + c = 100 + + t = time.time() + AB = torch.matmul(A, B) + print("AB time: ", time.time() - t) + print("AB fro: ", torch.norm(AB, p='fro')) + + t = time.time() + + CR_result = CR(A, B, c) + print("CR time: ", time.time() - t) + print("CR error: ", torch.norm(AB-CR_result, p='fro')) + + t = time.time() + weighted_CR_result = weighted_CR(A, B, c) + print("weighted_CR time: ", time.time() - t) + print("weighted_CR error: ", torch.norm(AB-weighted_CR_result, p='fro')) + + # CR.save("CR.pt") + weighted_CR.save("weighted_CR.pt") + +if __name__ == '__main__': + main() diff --git a/test/torchscripts/weightedCR.pt b/test/torchscripts/weightedCR.pt new file mode 100644 index 0000000000000000000000000000000000000000..0c897ec3783db6774b22dcf703f5c077aae5c487 GIT binary patch literal 10592 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 v+u!B?T{eElzx3>QSVBZN$ literal 0 HcmV?d00001 From 7782771c85a2081d84312843651a34f98bb90178 Mon Sep 17 00:00:00 2001 From: heyyuhao Date: Mon, 22 May 2023 15:25:05 +0800 Subject: [PATCH 2/2] add tests in github workflow --- .github/workflows/cmake.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 3255493e..78245655 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -46,4 +46,5 @@ jobs: run: | ./cpp_test "--success" ./sketch_test "--success" - ./crs_test "--success" \ No newline at end of file + ./crs_test "--success" + ./weighted_cr_test "--success" \ No newline at end of file