From 5c197460ed846fc31c928a3ae754a8db95406e4a Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Sat, 23 Nov 2019 15:16:17 -0500 Subject: [PATCH 01/29] first steps --- test/GPU.jl | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 test/GPU.jl diff --git a/test/GPU.jl b/test/GPU.jl new file mode 100644 index 00000000..d53456e5 --- /dev/null +++ b/test/GPU.jl @@ -0,0 +1,33 @@ +using CuArrays + +features = rand(1_000, 10) +features_int = rand(UInt8, 1_000, 10) + +hist = rand(256) +δ = rand(1_000_000) +idx = rand(UInt8, 1_000_000) +set = collect(1:length(vec)) + +hist_gpu = cu(hist) +δ_gpu = cu(δ) +idx_gpu = cu(idx) +set_gpu = cu(set) + +function split_cpu(hist, δ, idx, set) + @inbounds for i in set + hist[idx[i]] += δ[i] + end + return +end + +function split_gpu(hist, δ, idx, set) + @inbounds for i in set + hist[idx[i]] += δ[i] + end + return +end + + +hist +@time split_cpu(hist, δ, idx, set) +@time split_gpu(hist, δ_gpu, idx, set) From 21d831d0134de1bcfe072c10ef0473e806868343 Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Wed, 8 Jan 2020 19:10:36 -0500 Subject: [PATCH 02/29] test --- test/GPU.jl | 50 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/test/GPU.jl b/test/GPU.jl index d53456e5..3d8ec889 100644 --- a/test/GPU.jl +++ b/test/GPU.jl @@ -1,17 +1,22 @@ +# using CUDA using CuArrays +using CUDAnative features = rand(1_000, 10) features_int = rand(UInt8, 1_000, 10) -hist = rand(256) -δ = rand(1_000_000) -idx = rand(UInt8, 1_000_000) -set = collect(1:length(vec)) +nbins = 32 +hist = zeros(Float32, nbins) +δ = rand(Float32, 1_000_000) +δ² = rand(Float32, 1_000_000) +idx = (rand(1:nbins, 1_000_000)) +set = collect(1:length(idx)) -hist_gpu = cu(hist) -δ_gpu = cu(δ) -idx_gpu = cu(idx) -set_gpu = cu(set) +hist_gpu = CuArray(hist) +δ_gpu = CuArray(δ) +δ²_gpu = CuArray(δ²) +idx_gpu = CuArray(idx) +set_gpu = CuArray(set) function split_cpu(hist, δ, idx, set) @inbounds for i in set @@ -27,7 +32,34 @@ function split_gpu(hist, δ, idx, set) return end - hist @time split_cpu(hist, δ, idx, set) @time split_gpu(hist, δ_gpu, idx, set) + +function gpu_add2!(y, x) + index = threadIdx().x # this example only requires linear indexing, so just use `x` + stride = blockDim().x + for i = index:stride:length(y) + @inbounds y[i] += x[i] + end + return nothing +end + +δ = rand(Float32, 1_000_000) +δ² = rand(Float32, 1_000_000) +δ_gpu = CuArray(δ) +δ²_gpu = CuArray(δ²) +@time @cuda threads=256 gpu_add2!(δ_gpu, δ²_gpu) + + +function hist_test!(hist, idx, x) + index = threadIdx().x + stride = blockDim().x + for i = index:stride:length(x) + hist[idx[i]] += x[i] + end + return nothing +end + +hist = zeros(Float32, nbins) +@time @cuda threads=256 hist_test!(hist_gpu, idx, δ_gpu) From 75004f664ffc92eb5b6cee17ecb1c2f91dd924f5 Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Wed, 15 Jan 2020 22:16:59 -0500 Subject: [PATCH 03/29] refresh --- Manifest.toml | 271 +++++++++++++++++++++++++++----------------------- Project.toml | 3 + test/GPU.jl | 35 +++++-- 3 files changed, 178 insertions(+), 131 deletions(-) diff --git a/Manifest.toml b/Manifest.toml index 2c84b22d..7f5f9d90 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -2,15 +2,15 @@ [[AbstractFFTs]] deps = ["LinearAlgebra"] -git-tree-sha1 = "380e36c66edfa099cd90116b24c1ce8cafccac40" +git-tree-sha1 = "051c95d6836228d120f5f4b984dd5aba1624f716" uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" -version = "0.4.1" +version = "0.5.0" [[AbstractTrees]] -deps = ["Markdown", "Test"] -git-tree-sha1 = "6621d9645702c1c4e6970cc6a3eae440c768000b" +deps = ["Markdown"] +git-tree-sha1 = "8201f932428d25a2e2903300764515754847d87d" uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" -version = "0.2.1" +version = "0.3.0" [[Adapt]] deps = ["LinearAlgebra"] @@ -19,10 +19,16 @@ uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" version = "1.0.0" [[Arpack]] -deps = ["BinaryProvider", "Libdl", "LinearAlgebra"] -git-tree-sha1 = "07a2c077bdd4b6d23a40342a8a108e2ee5e58ab6" +deps = ["Arpack_jll", "Libdl", "LinearAlgebra"] +git-tree-sha1 = "2ff92b71ba1747c5fdd541f8fc87736d82f40ec9" uuid = "7d9fca2a-8960-54d3-9f78-7d1dccf2cb97" -version = "0.3.1" +version = "0.4.0" + +[[Arpack_jll]] +deps = ["Libdl", "OpenBLAS_jll", "Pkg"] +git-tree-sha1 = "68a90a692ddc0eb72d69a6993ca26e2a923bf195" +uuid = "68821587-b530-5797-8361-c406ea357684" +version = "3.5.0+2" [[Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" @@ -40,22 +46,16 @@ uuid = "9e28174c-4ba2-5203-b857-d8d62c4213ee" version = "0.8.10" [[BinaryProvider]] -deps = ["Libdl", "Logging", "SHA"] -git-tree-sha1 = "c7361ce8a2129f20b0e05a89f7070820cfed6648" +deps = ["Libdl", "SHA"] +git-tree-sha1 = "5b08ed6036d9d3f0ee6369410b830f8873d4024c" uuid = "b99e7846-7c00-51b0-8f62-c81ae34c0232" -version = "0.5.6" +version = "0.5.8" [[CEnum]] git-tree-sha1 = "62847acab40e6855a9b5905ccb99c2b5cf6b3ebb" uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" version = "0.2.0" -[[CSTParser]] -deps = ["Tokenize"] -git-tree-sha1 = "c69698c3d4a7255bc1b4bc2afc09f59db910243b" -uuid = "00ebfdb7-1f24-5e51-bd34-a7502290713f" -version = "0.6.2" - [[CSV]] deps = ["CategoricalArrays", "DataFrames", "Dates", "Mmap", "Parsers", "PooledArrays", "Profile", "Tables", "Unicode", "WeakRefStrings"] git-tree-sha1 = "5e7c67bc2873b347cd20ee742c93d243f3df9e93" @@ -64,32 +64,32 @@ version = "0.5.13" [[CUDAapi]] deps = ["Libdl", "Logging"] -git-tree-sha1 = "e063efb91cfefd7e6afd92c435d01398107a500b" +git-tree-sha1 = "56a813440ac98a1aa64672ab460a1512552211a7" uuid = "3895d2a7-ec45-59b8-82bb-cfc6a382f9b3" -version = "1.2.0" +version = "2.1.0" [[CUDAdrv]] -deps = ["CUDAapi", "Libdl", "Printf"] -git-tree-sha1 = "9ce99b5732c70e06ed97c042187baed876fb1698" +deps = ["CEnum", "CUDAapi", "Printf"] +git-tree-sha1 = "1fce616fa0806c67c133eb1d2f68f0f1a7504665" uuid = "c5f51814-7f29-56b8-a69c-e4d8f6be1fde" -version = "3.1.0" +version = "5.0.1" [[CUDAnative]] -deps = ["Adapt", "CUDAapi", "CUDAdrv", "DataStructures", "InteractiveUtils", "LLVM", "Libdl", "Logging", "Printf", "TimerOutputs"] -git-tree-sha1 = "3d6427f28430730c0e4107d8f26c4943a9a142dc" +deps = ["Adapt", "CEnum", "CUDAapi", "CUDAdrv", "DataStructures", "InteractiveUtils", "LLVM", "Libdl", "Printf", "TimerOutputs"] +git-tree-sha1 = "6e11d5c2c91fc623952e94c4fb73f9c4db74795a" uuid = "be33ccc6-a3ff-5ff2-a52e-74243cff1e17" -version = "2.4.0" +version = "2.7.0" [[Cassette]] -git-tree-sha1 = "da85d135b6048d3e78603e277cf9a4609f7e0673" +git-tree-sha1 = "36bd4e0088652b0b2d25a03e531f0d04258feb78" uuid = "7057c7e9-c182-5462-911a-8362d720325c" -version = "0.2.6" +version = "0.3.0" [[CategoricalArrays]] -deps = ["Compat", "DataAPI", "Future", "JSON", "Missings", "Printf", "Reexport", "Unicode"] -git-tree-sha1 = "45101c4d0df3946acb6e9bfcfd3a8c32abbd421b" +deps = ["Compat", "DataAPI", "Future", "JSON", "Missings", "Printf", "Reexport", "Statistics", "Unicode"] +git-tree-sha1 = "7c4419347d724a057b5a550078f8ff4cdfdeedf6" uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" -version = "0.7.1" +version = "0.7.6" [[CodeTracking]] deps = ["InteractiveUtils", "UUIDs"] @@ -105,9 +105,9 @@ version = "0.6.0" [[ColorTypes]] deps = ["FixedPointNumbers", "Random"] -git-tree-sha1 = "10050a24b09e8e41b951e9976b109871ce98d965" +git-tree-sha1 = "7b62b728a5f3dd6ee3b23910303ccf27e82fad5e" uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" -version = "0.8.0" +version = "0.8.1" [[Colors]] deps = ["ColorTypes", "FixedPointNumbers", "InteractiveUtils", "Printf", "Reexport"] @@ -123,27 +123,15 @@ version = "0.2.0" [[Compat]] deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"] -git-tree-sha1 = "84aa74986c5b9b898b0d1acaf3258741ee64754f" +git-tree-sha1 = "ed2c4abadf84c53d9e58510b5fc48912c2336fbb" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "2.1.0" - -[[Conda]] -deps = ["JSON", "VersionParsing"] -git-tree-sha1 = "9a11d428dcdc425072af4aea19ab1e8c3e01c032" -uuid = "8f4d0f93-b110-5947-807f-2305c1781a2d" -version = "1.3.0" - -[[Crayons]] -deps = ["Test"] -git-tree-sha1 = "f621b8ef51fd2004c7cf157ea47f027fdeac5523" -uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" -version = "4.0.0" +version = "2.2.0" [[CuArrays]] -deps = ["AbstractFFTs", "Adapt", "CUDAapi", "CUDAdrv", "CUDAnative", "GPUArrays", "LinearAlgebra", "MacroTools", "NNlib", "Printf", "Random", "Requires", "SparseArrays", "TimerOutputs"] -git-tree-sha1 = "46b48742a84bb839e74215b7e468a4a1c6ba30f9" +deps = ["AbstractFFTs", "Adapt", "CEnum", "CUDAapi", "CUDAdrv", "CUDAnative", "DataStructures", "GPUArrays", "Libdl", "LinearAlgebra", "MacroTools", "NNlib", "Printf", "Random", "Requires", "SparseArrays", "TimerOutputs"] +git-tree-sha1 = "51fbe053dea29ed2513e02d38380007310cf4c4b" uuid = "3a865a2d-5b23-5a0f-bc46-62713ec82fae" -version = "1.2.1" +version = "1.6.0" [[DataAPI]] git-tree-sha1 = "674b67f344687a88310213ddfa8a2b3c76cc4252" @@ -158,9 +146,9 @@ version = "0.19.4" [[DataStructures]] deps = ["InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "f94423c68f2e47db0d6f626a26d4872266e0ec3d" +git-tree-sha1 = "f784254f428fb8fd7ac15982e5862a38a44523d3" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.17.2" +version = "0.17.7" [[DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" @@ -176,10 +164,10 @@ deps = ["Mmap"] uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" [[DiffResults]] -deps = ["Compat", "StaticArrays"] -git-tree-sha1 = "34a4a1e8be7bc99bc9c611b895b5baf37a80584c" +deps = ["StaticArrays"] +git-tree-sha1 = "da24935df8e0c6cf28de340b958f6aac88eaa0cc" uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" -version = "0.0.4" +version = "1.0.2" [[DiffRules]] deps = ["Random", "Test"] @@ -198,19 +186,25 @@ uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" version = "0.21.3" [[FFTW]] -deps = ["AbstractFFTs", "BinaryProvider", "Conda", "Libdl", "LinearAlgebra", "Reexport", "Test"] -git-tree-sha1 = "6c5b420da0b8c12098048561b8d58f81adea506f" +deps = ["AbstractFFTs", "FFTW_jll", "IntelOpenMP_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Reexport"] +git-tree-sha1 = "109d82fa4b00429f9afcce873e9f746f11f018d3" uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" -version = "1.0.1" +version = "1.2.0" + +[[FFTW_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "05674f209a6e3387dd103a945b0113eeb64b1a58" +uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" +version = "3.3.9+3" [[FileWatching]] uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" [[FillArrays]] deps = ["LinearAlgebra", "Random", "SparseArrays"] -git-tree-sha1 = "8fba6ddaf66b45dec830233cea0aae43eb1261ad" +git-tree-sha1 = "fec413d4fc547992eb62a5c544cedb6d7853c1f5" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "0.6.4" +version = "0.8.4" [[FixedPointNumbers]] git-tree-sha1 = "d14a6fa5890ea3a7e5dcab6811114f132fec2b4b" @@ -218,26 +212,46 @@ uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" version = "0.6.1" [[Flux]] -deps = ["AbstractTrees", "Adapt", "CUDAapi", "CodecZlib", "Colors", "CuArrays", "DelimitedFiles", "Juno", "LinearAlgebra", "MacroTools", "NNlib", "Pkg", "Printf", "Random", "Reexport", "SHA", "Statistics", "StatsBase", "Tracker", "ZipFile"] -git-tree-sha1 = "b5ebbd896dcd8ff19c6cb7297c4d323155b26bcf" +deps = ["AbstractTrees", "Adapt", "CodecZlib", "Colors", "CuArrays", "DelimitedFiles", "Juno", "MacroTools", "NNlib", "Pkg", "Printf", "Random", "Reexport", "SHA", "Statistics", "StatsBase", "Test", "ZipFile", "Zygote"] +git-tree-sha1 = "8134adbb0f10b0d22b22f8b4299d0d20509edc5f" uuid = "587475ba-b771-5e3f-ad9e-33799f191a9c" -version = "0.9.0" +version = "0.10.1" [[ForwardDiff]] -deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "InteractiveUtils", "LinearAlgebra", "NaNMath", "Random", "SparseArrays", "SpecialFunctions", "StaticArrays", "Test"] -git-tree-sha1 = "4c4d727f1b7e0092134fabfab6396b8945c1ea5b" +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "NaNMath", "Random", "SpecialFunctions", "StaticArrays"] +git-tree-sha1 = "840700059391d36e2498d89c2e82c08f261f2a2a" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "0.10.3" +version = "0.10.8" [[Future]] deps = ["Random"] uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" [[GPUArrays]] -deps = ["Adapt", "FFTW", "FillArrays", "LinearAlgebra", "Printf", "Random", "Serialization", "StaticArrays", "Test"] -git-tree-sha1 = "77e27264276fe97a7e7fb928bf8999a145abc018" +deps = ["AbstractFFTs", "Adapt", "LinearAlgebra", "Printf", "Random", "Serialization"] +git-tree-sha1 = "e756da6cee76a5f1436a05827fa8fdf3badc577f" uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" -version = "1.0.3" +version = "2.0.1" + +[[GeometricFlux]] +deps = ["CUDAapi", "DataStructures", "Flux", "IRTools", "LinearAlgebra", "Random", "Requires", "SparseArrays", "Statistics", "Zygote", "ZygoteRules"] +git-tree-sha1 = "9bebf1227738710e464f258ba687e5917639d82d" +repo-rev = "master" +repo-url = "https://github.com/yuehhua/GeometricFlux.jl.git" +uuid = "7e08b658-56d3-11e9-2997-919d5b31e4ea" +version = "0.2.0" + +[[IRTools]] +deps = ["InteractiveUtils", "MacroTools", "Test"] +git-tree-sha1 = "72421971e60917b8cd7737f9577c4f0f87eab306" +uuid = "7869d1d1-7146-5819-86e3-90919afe41df" +version = "0.3.0" + +[[IntelOpenMP_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "fb8e1c7a5594ba56f9011310790e03b5384998d6" +uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" +version = "2018.0.3+0" [[InteractiveUtils]] deps = ["Markdown"] @@ -262,9 +276,9 @@ version = "0.21.0" [[JuliaInterpreter]] deps = ["CodeTracking", "InteractiveUtils", "Random", "UUIDs"] -git-tree-sha1 = "5bb6a8b09d881c1cbe39bd8135667ed5978168e9" +git-tree-sha1 = "a4f675340a109713f74c47a2b499df06f800c8d0" uuid = "aa1ae85d-cabe-5617-a682-6adf51b2e16a" -version = "0.7.4" +version = "0.7.8" [[Juno]] deps = ["Base64", "Logging", "Media", "Profile", "Test"] @@ -274,9 +288,9 @@ version = "0.7.2" [[LLVM]] deps = ["CEnum", "Libdl", "Printf", "Unicode"] -git-tree-sha1 = "4a05f742837779a00bd8c9a18da6817367c4245d" +git-tree-sha1 = "1d08d7e4250f452f6cb20e4574daaebfdbee0ff7" uuid = "929cbde3-209d-540e-8aea-75f648917ca0" -version = "1.3.0" +version = "1.3.3" [[LibGit2]] uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" @@ -297,11 +311,17 @@ git-tree-sha1 = "ea065f38cccb556b4eabe43b3b3b91e1c67cbffd" uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b" version = "0.3.8" +[[MKL_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "61069ae718b8ab1e325bbfb4e5268902e7ea08e3" +uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" +version = "2019.0.117+0" + [[MacroTools]] -deps = ["CSTParser", "Compat", "DataStructures", "Test", "Tokenize"] -git-tree-sha1 = "d6e9dedb8c92c3465575442da456aec15a89ff76" +deps = ["DataStructures", "Markdown", "Random"] +git-tree-sha1 = "e2fc7a55bb2224e203bbd8b59f72b91323233458" uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.1" +version = "0.5.3" [[Markdown]] deps = ["Base64"] @@ -323,16 +343,21 @@ version = "0.4.3" uuid = "a63ad114-7e13-5084-954f-fe012c677804" [[NNlib]] -deps = ["Libdl", "LinearAlgebra", "Requires", "Statistics", "TimerOutputs"] -git-tree-sha1 = "0c667371391fc6bb31f7f12f96a56a17098b3de8" +deps = ["BinaryProvider", "Libdl", "LinearAlgebra", "Requires", "Statistics"] +git-tree-sha1 = "135c0de4794d5e214b06f1fb4787af4a72896e61" uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" -version = "0.6.0" +version = "0.6.2" [[NaNMath]] -deps = ["Compat"] -git-tree-sha1 = "ce3b85e484a5d4c71dd5316215069311135fa9f2" +git-tree-sha1 = "928b8ca9b2791081dc71a51c55347c27c618760f" uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" -version = "0.3.2" +version = "0.3.3" + +[[OpenBLAS_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "3a6e5767e8ae022871c19162cc3ecd80748bd3dc" +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.7+4" [[OrderedCollections]] deps = ["Random", "Serialization", "Test"] @@ -348,18 +373,19 @@ version = "0.9.10" [[Parsers]] deps = ["Dates", "Test"] -git-tree-sha1 = "ef0af6c8601db18c282d092ccbd2f01f3f0cd70b" +git-tree-sha1 = "0139ba59ce9bc680e2925aec5b7db79065d60556" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "0.3.7" +version = "0.3.10" [[Pkg]] -deps = ["Dates", "LibGit2", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"] +deps = ["Dates", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" [[PooledArrays]] -git-tree-sha1 = "6e8c38927cb6e9ae144f7277c753714861b27d14" +deps = ["DataAPI"] +git-tree-sha1 = "b1333d4eced1826e15adbdf01a4ecaccca9d353c" uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" -version = "0.5.2" +version = "0.5.3" [[Printf]] deps = ["Unicode"] @@ -370,10 +396,10 @@ deps = ["Printf"] uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" [[QuadGK]] -deps = ["DataStructures", "LinearAlgebra", "Test"] -git-tree-sha1 = "3ce467a8e76c6030d4c3786e7d3a73442017cdc0" +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "dc84e810393cfc6294248c9032a9cdacc14a3db4" uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" -version = "2.0.3" +version = "2.3.1" [[REPL]] deps = ["InteractiveUtils", "Markdown", "Sockets"] @@ -390,10 +416,10 @@ uuid = "189a3867-3050-52da-a836-e630ba90ab69" version = "0.2.0" [[Requires]] -deps = ["Test"] -git-tree-sha1 = "f6fbf4ba64d295e146e49e021207993b6b48c7d1" +deps = ["UUIDs"] +git-tree-sha1 = "999513b7dea8ac17359ed50ae8ea089e4464e35e" uuid = "ae029012-a4dd-5104-9daa-d747884805df" -version = "0.5.2" +version = "1.0.0" [[Revise]] deps = ["CodeTracking", "Distributed", "FileWatching", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "Pkg", "REPL", "UUIDs", "Unicode"] @@ -402,10 +428,10 @@ uuid = "295af30f-e4ad-537b-8983-00126c2a3abe" version = "2.2.0" [[Rmath]] -deps = ["BinaryProvider", "Libdl", "Random", "Statistics", "Test"] -git-tree-sha1 = "9a6c758cdf73036c3239b0afbea790def1dabff9" +deps = ["BinaryProvider", "Libdl", "Random", "Statistics"] +git-tree-sha1 = "2bbddcb984a1d08612d0c4abb5b4774883f6fa98" uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" -version = "0.5.0" +version = "0.6.0" [[SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" @@ -459,7 +485,7 @@ uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" version = "0.8.0" [[SuiteSparse]] -deps = ["Libdl", "LinearAlgebra", "SparseArrays"] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" [[TableTraits]] @@ -479,15 +505,10 @@ deps = ["Distributed", "InteractiveUtils", "Logging", "Random"] uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [[TimerOutputs]] -deps = ["Crayons", "Printf", "Test", "Unicode"] -git-tree-sha1 = "b80671c06f8f8bae08c55d67b5ce292c5ae2660c" +deps = ["Printf"] +git-tree-sha1 = "311765af81bbb48d7bad01fb016d9c328c6ede03" uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" -version = "0.5.0" - -[[Tokenize]] -git-tree-sha1 = "dfcdbbfb2d0370716c815cbd6f8a364efb6f42cf" -uuid = "0796e94c-ce3b-5d07-9a54-7f471281c624" -version = "0.5.6" +version = "0.5.3" [[Traceur]] deps = ["Cassette", "InteractiveUtils", "Logging", "MacroTools", "Test"] @@ -495,12 +516,6 @@ git-tree-sha1 = "c007db8fbec24668a7cdf4a878202abb648d568f" uuid = "37b6cedf-1f77-55f8-9503-c64b63398394" version = "0.3.0" -[[Tracker]] -deps = ["Adapt", "DiffRules", "ForwardDiff", "LinearAlgebra", "MacroTools", "NNlib", "NaNMath", "Printf", "Random", "Requires", "SpecialFunctions", "Statistics", "Test"] -git-tree-sha1 = "1aa443d3b4bfa91a8aec32f169a479cb87309910" -uuid = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" -version = "0.2.3" - [[TranscodingStreams]] deps = ["Random", "Test"] git-tree-sha1 = "7c53c35547de1c5b9d46a4797cf6d8253807108c" @@ -520,20 +535,32 @@ uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" [[Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" -[[VersionParsing]] -deps = ["Compat"] -git-tree-sha1 = "c9d5aa108588b978bd859554660c8a5c4f2f7669" -uuid = "81def892-9a0e-5fdd-b105-ffc91e053289" -version = "1.1.3" - [[WeakRefStrings]] -deps = ["Random", "Test"] -git-tree-sha1 = "9a0bb82eede528debe631b642eeb48a631a69bc2" +deps = ["DataAPI", "Random", "Test"] +git-tree-sha1 = "28807f85197eaad3cbd2330386fac1dcb9e7e11d" uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" -version = "0.6.1" +version = "0.6.2" [[ZipFile]] -deps = ["BinaryProvider", "Libdl", "Printf"] -git-tree-sha1 = "580ce62b6c14244916cc28ad54f8a2e2886f843d" +deps = ["Libdl", "Printf", "Zlib_jll"] +git-tree-sha1 = "5de8320a46812da1a8ca98b16a8a4546d44efa62" uuid = "a5390f91-8eb1-5f08-bee0-b1d1ffed6cea" -version = "0.8.3" +version = "0.9.0" + +[[Zlib_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "5618a43055eb09377edca21d19d0e99bce24a9c3" +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.11+7" + +[[Zygote]] +deps = ["DiffRules", "FFTW", "FillArrays", "ForwardDiff", "IRTools", "InteractiveUtils", "LinearAlgebra", "MacroTools", "NNlib", "NaNMath", "Random", "Requires", "SpecialFunctions", "Statistics", "ZygoteRules"] +git-tree-sha1 = "74382bcc4c1e8075e14554da67d75565f8fb7827" +uuid = "e88e6eb3-aa80-5325-afca-941959d7151f" +version = "0.4.5" + +[[ZygoteRules]] +deps = ["MacroTools"] +git-tree-sha1 = "b3b4882cc9accf6731a08cc39543fbc6b669dca8" +uuid = "700de1a5-db45-46bc-99cf-38207098b444" +version = "0.2.0" diff --git a/Project.toml b/Project.toml index d244c04c..d9409226 100644 --- a/Project.toml +++ b/Project.toml @@ -6,10 +6,13 @@ version = "0.3.1" [deps] BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +CUDAnative = "be33ccc6-a3ff-5ff2-a52e-74243cff1e17" CodeTracking = "da1fd8a2-8d9e-5ec2-8556-3022fb5608a2" +CuArrays = "3a865a2d-5b23-5a0f-bc46-62713ec82fae" DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c" +GeometricFlux = "7e08b658-56d3-11e9-2997-919d5b31e4ea" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Revise = "295af30f-e4ad-537b-8983-00126c2a3abe" SortingAlgorithms = "a2af1166-a08f-5f64-846c-94a0d3cef48c" diff --git a/test/GPU.jl b/test/GPU.jl index 3d8ec889..ad102254 100644 --- a/test/GPU.jl +++ b/test/GPU.jl @@ -1,16 +1,19 @@ # using CUDA -using CuArrays using CUDAnative +using CuArrays +using GeometricFlux features = rand(1_000, 10) features_int = rand(UInt8, 1_000, 10) -nbins = 32 -hist = zeros(Float32, nbins) -δ = rand(Float32, 1_000_000) -δ² = rand(Float32, 1_000_000) -idx = (rand(1:nbins, 1_000_000)) +nbins = 20 +hist = zeros(Float32, 1, nbins) +δ = rand(Float32, 1, 10_000_000) +δ² = rand(Float32, 1, 10_000_000) +idx = rand(1:nbins, 10_000_000) +sub_idx = rand(1:nbins, 100_000) set = collect(1:length(idx)) +sub_set = sort(rand(set, 100_000)) hist_gpu = CuArray(hist) δ_gpu = CuArray(δ) @@ -18,6 +21,20 @@ hist_gpu = CuArray(hist) idx_gpu = CuArray(idx) set_gpu = CuArray(set) +@time sumpool(idx, δ) +@time sumpool(idx_gpu, δ_gpu) +@time scatter_add!(hist, δ, idx) +CuArrays.@time scatter_add!(hist_gpu, δ_gpu, idx_gpu) + +CuArrays.@time CuArrays.scan!(+,δ²_gpu, δ_gpu,dims=1) + +δ = rand(Float32, 1, 1_000) +hist_gpu = CuArray(hist) +δ_gpu = CuArray(δ[1:1000]) +idx_gpu = CuArray(idx[1:1000]) +scatter_add!(hist_gpu, δ_gpu, idx_gpu) +sumpool(idx[1:1000], δ) + function split_cpu(hist, δ, idx, set) @inbounds for i in set hist[idx[i]] += δ[i] @@ -37,9 +54,9 @@ hist @time split_gpu(hist, δ_gpu, idx, set) function gpu_add2!(y, x) - index = threadIdx().x # this example only requires linear indexing, so just use `x` + index = threadIdx().x stride = blockDim().x - for i = index:stride:length(y) + @inbounds for i = index:stride:length(y) @inbounds y[i] += x[i] end return nothing @@ -49,7 +66,7 @@ end δ² = rand(Float32, 1_000_000) δ_gpu = CuArray(δ) δ²_gpu = CuArray(δ²) -@time @cuda threads=256 gpu_add2!(δ_gpu, δ²_gpu) +CuArrays.@time @cuda threads=256 gpu_add2!(δ_gpu, δ²_gpu) function hist_test!(hist, idx, x) From aaa893c77d711308a5735abcdb2e086479cdc597 Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Sat, 18 Jan 2020 14:13:41 -0500 Subject: [PATCH 04/29] update --- Manifest.toml | 110 +++++++++++++++++++++++++------------------------- test/GPU.jl | 18 ++++++++- 2 files changed, 72 insertions(+), 56 deletions(-) diff --git a/Manifest.toml b/Manifest.toml index 7f5f9d90..60b91d70 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -8,9 +8,9 @@ version = "0.5.0" [[AbstractTrees]] deps = ["Markdown"] -git-tree-sha1 = "8201f932428d25a2e2903300764515754847d87d" +git-tree-sha1 = "940760b82db1f7090f7d16fe6e4b121cc181db45" uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" -version = "0.3.0" +version = "0.3.1" [[Adapt]] deps = ["LinearAlgebra"] @@ -39,12 +39,6 @@ git-tree-sha1 = "90b73db83791c5f83155016dd1cc1f684d4e1361" uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" version = "0.4.3" -[[BinDeps]] -deps = ["Compat", "Libdl", "SHA", "URIParser"] -git-tree-sha1 = "12093ca6cdd0ee547c39b1870e0c9c3f154d9ca9" -uuid = "9e28174c-4ba2-5203-b857-d8d62c4213ee" -version = "0.8.10" - [[BinaryProvider]] deps = ["Libdl", "SHA"] git-tree-sha1 = "5b08ed6036d9d3f0ee6369410b830f8873d4024c" @@ -57,10 +51,10 @@ uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" version = "0.2.0" [[CSV]] -deps = ["CategoricalArrays", "DataFrames", "Dates", "Mmap", "Parsers", "PooledArrays", "Profile", "Tables", "Unicode", "WeakRefStrings"] -git-tree-sha1 = "5e7c67bc2873b347cd20ee742c93d243f3df9e93" +deps = ["CategoricalArrays", "DataFrames", "Dates", "FilePathsBase", "Mmap", "Parsers", "PooledArrays", "Tables", "Unicode", "WeakRefStrings"] +git-tree-sha1 = "027b8d04a1983153ecbcf8f905e926bf01c078e8" uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" -version = "0.5.13" +version = "0.5.22" [[CUDAapi]] deps = ["Libdl", "Logging"] @@ -76,9 +70,9 @@ version = "5.0.1" [[CUDAnative]] deps = ["Adapt", "CEnum", "CUDAapi", "CUDAdrv", "DataStructures", "InteractiveUtils", "LLVM", "Libdl", "Printf", "TimerOutputs"] -git-tree-sha1 = "6e11d5c2c91fc623952e94c4fb73f9c4db74795a" +git-tree-sha1 = "3698d47fa07d91da59984a29ddc7533da3979f70" uuid = "be33ccc6-a3ff-5ff2-a52e-74243cff1e17" -version = "2.7.0" +version = "2.8.0" [[Cassette]] git-tree-sha1 = "36bd4e0088652b0b2d25a03e531f0d04258feb78" @@ -87,9 +81,9 @@ version = "0.3.0" [[CategoricalArrays]] deps = ["Compat", "DataAPI", "Future", "JSON", "Missings", "Printf", "Reexport", "Statistics", "Unicode"] -git-tree-sha1 = "7c4419347d724a057b5a550078f8ff4cdfdeedf6" +git-tree-sha1 = "23d7324164c89638c18f6d7f90d972fa9c4fa9fb" uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" -version = "0.7.6" +version = "0.7.7" [[CodeTracking]] deps = ["InteractiveUtils", "UUIDs"] @@ -123,9 +117,9 @@ version = "0.2.0" [[Compat]] deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"] -git-tree-sha1 = "ed2c4abadf84c53d9e58510b5fc48912c2336fbb" +git-tree-sha1 = "3819f476b6b37ef8ea837070ed831b4ebadfa1e9" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "2.2.0" +version = "3.2.0" [[CuArrays]] deps = ["AbstractFFTs", "Adapt", "CEnum", "CUDAapi", "CUDAdrv", "CUDAnative", "DataStructures", "GPUArrays", "Libdl", "LinearAlgebra", "MacroTools", "NNlib", "Printf", "Random", "Requires", "SparseArrays", "TimerOutputs"] @@ -139,16 +133,16 @@ uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" version = "1.1.0" [[DataFrames]] -deps = ["CategoricalArrays", "Compat", "DataAPI", "InvertedIndices", "IteratorInterfaceExtensions", "Missings", "PooledArrays", "Printf", "REPL", "Reexport", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] -git-tree-sha1 = "271528230c65a4517522e2968c3deed76b92b998" +deps = ["CategoricalArrays", "Compat", "DataAPI", "Future", "InvertedIndices", "IteratorInterfaceExtensions", "Missings", "PooledArrays", "Printf", "REPL", "Reexport", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] +git-tree-sha1 = "00136fcd39d503e66ab1b2eab800c47deaf7ca04" uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" -version = "0.19.4" +version = "0.20.0" [[DataStructures]] deps = ["InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "f784254f428fb8fd7ac15982e5862a38a44523d3" +git-tree-sha1 = "b7720de347734f4716d1815b00ce5664ed6bbfd4" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.17.7" +version = "0.17.9" [[DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" @@ -170,20 +164,20 @@ uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" version = "1.0.2" [[DiffRules]] -deps = ["Random", "Test"] -git-tree-sha1 = "dc0869fb2f5b23466b32ea799bd82c76480167f7" +deps = ["NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "10dca52cf6d4a62d82528262921daf63b99704a2" uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" -version = "0.0.10" +version = "1.0.0" [[Distributed]] deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" [[Distributions]] -deps = ["LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns"] -git-tree-sha1 = "b419fcf95ef9c8cf4d6610cd323890ad66d64240" +deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns"] +git-tree-sha1 = "71a3f1ae1fca9ed876edfbc2079d7b7c27e2e3d5" uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.21.3" +version = "0.22.3" [[FFTW]] deps = ["AbstractFFTs", "FFTW_jll", "IntelOpenMP_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Reexport"] @@ -197,6 +191,12 @@ git-tree-sha1 = "05674f209a6e3387dd103a945b0113eeb64b1a58" uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" version = "3.3.9+3" +[[FilePathsBase]] +deps = ["Dates", "LinearAlgebra", "Printf", "Test", "UUIDs"] +git-tree-sha1 = "2cd6e2e7965934f72cb80251f760228e2264bab3" +uuid = "48062228-2e41-5def-b9a4-89aafe57970f" +version = "0.7.0" + [[FileWatching]] uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" @@ -219,9 +219,9 @@ version = "0.10.1" [[ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "NaNMath", "Random", "SpecialFunctions", "StaticArrays"] -git-tree-sha1 = "840700059391d36e2498d89c2e82c08f261f2a2a" +git-tree-sha1 = "88b082d492be6b63f967b6c96b352e25ced1a34c" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "0.10.8" +version = "0.10.9" [[Future]] deps = ["Random"] @@ -307,15 +307,15 @@ uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" [[LoweredCodeUtils]] deps = ["JuliaInterpreter"] -git-tree-sha1 = "ea065f38cccb556b4eabe43b3b3b91e1c67cbffd" +git-tree-sha1 = "b416a30717e9109fffd4d9869f2f962b5dca3162" uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b" -version = "0.3.8" +version = "0.4.2" [[MKL_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "61069ae718b8ab1e325bbfb4e5268902e7ea08e3" +deps = ["IntelOpenMP_jll", "Libdl", "Pkg"] +git-tree-sha1 = "720629cc8cbd12c146ca01b661fd1a6cf66e2ff4" uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" -version = "2019.0.117+0" +version = "2019.0.117+2" [[MacroTools]] deps = ["DataStructures", "Markdown", "Random"] @@ -344,9 +344,9 @@ uuid = "a63ad114-7e13-5084-954f-fe012c677804" [[NNlib]] deps = ["BinaryProvider", "Libdl", "LinearAlgebra", "Requires", "Statistics"] -git-tree-sha1 = "135c0de4794d5e214b06f1fb4787af4a72896e61" +git-tree-sha1 = "755c0bab3912ff782167e1b4b774b833f8a0e550" uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" -version = "0.6.2" +version = "0.6.4" [[NaNMath]] git-tree-sha1 = "928b8ca9b2791081dc71a51c55347c27c618760f" @@ -359,6 +359,12 @@ git-tree-sha1 = "3a6e5767e8ae022871c19162cc3ecd80748bd3dc" uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" version = "0.3.7+4" +[[OpenSpecFun_jll]] +deps = ["Libdl", "Pkg"] +git-tree-sha1 = "65f672edebf3f4e613ddf37db9dcbd7a407e5e90" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.3+1" + [[OrderedCollections]] deps = ["Random", "Serialization", "Test"] git-tree-sha1 = "c4c13474d23c60d20a67b217f1d7f22a40edf8f1" @@ -423,9 +429,9 @@ version = "1.0.0" [[Revise]] deps = ["CodeTracking", "Distributed", "FileWatching", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "Pkg", "REPL", "UUIDs", "Unicode"] -git-tree-sha1 = "2e5e1ec94098cd4866ba157be54f7e166f1c56d5" +git-tree-sha1 = "2ecbd19f31a934b035bfc38036d5f7ac575d0878" uuid = "295af30f-e4ad-537b-8983-00126c2a3abe" -version = "2.2.0" +version = "2.5.0" [[Rmath]] deps = ["BinaryProvider", "Libdl", "Random", "Statistics"] @@ -457,16 +463,16 @@ deps = ["LinearAlgebra", "Random"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [[SpecialFunctions]] -deps = ["BinDeps", "BinaryProvider", "Libdl", "Test"] -git-tree-sha1 = "0b45dc2e45ed77f445617b99ff2adf0f5b0f23ea" +deps = ["OpenSpecFun_jll"] +git-tree-sha1 = "268052ee908b2c086cc0011f528694f02f3e2408" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "0.7.2" +version = "0.9.0" [[StaticArrays]] deps = ["LinearAlgebra", "Random", "Statistics"] -git-tree-sha1 = "db23bbf50064c582b6f2b9b043c8e7e98ea8c0c6" +git-tree-sha1 = "5a3bcb6233adabde68ebc97be66e95dcb787424c" uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "0.11.0" +version = "0.12.1" [[Statistics]] deps = ["LinearAlgebra", "SparseArrays"] @@ -479,10 +485,10 @@ uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" version = "0.32.0" [[StatsFuns]] -deps = ["Rmath", "SpecialFunctions", "Test"] -git-tree-sha1 = "b3a4e86aa13c732b8a8c0ba0c3d3264f55e6bb3e" +deps = ["Rmath", "SpecialFunctions"] +git-tree-sha1 = "79982835d2ff3970685cb704500909c94189bde9" uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" -version = "0.8.0" +version = "0.9.3" [[SuiteSparse]] deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] @@ -522,12 +528,6 @@ git-tree-sha1 = "7c53c35547de1c5b9d46a4797cf6d8253807108c" uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" version = "0.9.5" -[[URIParser]] -deps = ["Test", "Unicode"] -git-tree-sha1 = "6ddf8244220dfda2f17539fa8c9de20d6c575b69" -uuid = "30578b45-9adc-5946-b283-645ec420af67" -version = "0.4.0" - [[UUIDs]] deps = ["Random", "SHA"] uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" @@ -555,9 +555,9 @@ version = "1.2.11+7" [[Zygote]] deps = ["DiffRules", "FFTW", "FillArrays", "ForwardDiff", "IRTools", "InteractiveUtils", "LinearAlgebra", "MacroTools", "NNlib", "NaNMath", "Random", "Requires", "SpecialFunctions", "Statistics", "ZygoteRules"] -git-tree-sha1 = "74382bcc4c1e8075e14554da67d75565f8fb7827" +git-tree-sha1 = "ca4dfa4de0a0e2c1da6c8c67d3b9af99645b57fc" uuid = "e88e6eb3-aa80-5325-afca-941959d7151f" -version = "0.4.5" +version = "0.4.6" [[ZygoteRules]] deps = ["MacroTools"] diff --git a/test/GPU.jl b/test/GPU.jl index ad102254..cfd97d90 100644 --- a/test/GPU.jl +++ b/test/GPU.jl @@ -1,6 +1,7 @@ # using CUDA using CUDAnative using CuArrays +using Flux using GeometricFlux features = rand(1_000, 10) @@ -24,9 +25,24 @@ set_gpu = CuArray(set) @time sumpool(idx, δ) @time sumpool(idx_gpu, δ_gpu) @time scatter_add!(hist, δ, idx) + +function scatter_loop(hist, δ, idx) + for i in 1:10 + scatter_add!(hist, δ, idx) + end + return Array(hist) +end +@time hh = scatter_loop(hist_gpu, δ_gpu, idx_gpu) +println(hh) CuArrays.@time scatter_add!(hist_gpu, δ_gpu, idx_gpu) -CuArrays.@time CuArrays.scan!(+,δ²_gpu, δ_gpu,dims=1) + +δ = rand(Float32, 100, 2_000_000) +δ² = rand(Float32, 100, 2_000_000) +δ_gpu = CuArray(δ) +δ²_gpu = CuArray(δ²) +CuArrays.@time CuArrays.scan!(+ ,δ²_gpu, δ_gpu,dims=1) +@time x = δ²_gpu[2,5] δ = rand(Float32, 1, 1_000) hist_gpu = CuArray(hist) From b4803e2032e14eeb9227ae5878e3b17133757419 Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Tue, 4 Feb 2020 19:08:59 -0500 Subject: [PATCH 05/29] test kernel --- Manifest.toml | 60 ++++++++++++------------- test/GPU.jl | 120 +++++++++++++++----------------------------------- 2 files changed, 65 insertions(+), 115 deletions(-) diff --git a/Manifest.toml b/Manifest.toml index 60b91d70..eec60d8d 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -52,9 +52,9 @@ version = "0.2.0" [[CSV]] deps = ["CategoricalArrays", "DataFrames", "Dates", "FilePathsBase", "Mmap", "Parsers", "PooledArrays", "Tables", "Unicode", "WeakRefStrings"] -git-tree-sha1 = "027b8d04a1983153ecbcf8f905e926bf01c078e8" +git-tree-sha1 = "fe9b828d5e7b55431d75d6d180ef843d69dea048" uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" -version = "0.5.22" +version = "0.5.23" [[CUDAapi]] deps = ["Libdl", "Logging"] @@ -64,20 +64,20 @@ version = "2.1.0" [[CUDAdrv]] deps = ["CEnum", "CUDAapi", "Printf"] -git-tree-sha1 = "1fce616fa0806c67c133eb1d2f68f0f1a7504665" +git-tree-sha1 = "5660775f2a3214420add960e1ff2baf46d5297cd" uuid = "c5f51814-7f29-56b8-a69c-e4d8f6be1fde" -version = "5.0.1" +version = "5.1.0" [[CUDAnative]] deps = ["Adapt", "CEnum", "CUDAapi", "CUDAdrv", "DataStructures", "InteractiveUtils", "LLVM", "Libdl", "Printf", "TimerOutputs"] -git-tree-sha1 = "3698d47fa07d91da59984a29ddc7533da3979f70" +git-tree-sha1 = "e0c2805c9a7d338823c0d8f574242e284410fa61" uuid = "be33ccc6-a3ff-5ff2-a52e-74243cff1e17" -version = "2.8.0" +version = "2.9.1" [[Cassette]] -git-tree-sha1 = "36bd4e0088652b0b2d25a03e531f0d04258feb78" +git-tree-sha1 = "f6a148cadd38ba328bd2c03442037ef801a6aa05" uuid = "7057c7e9-c182-5462-911a-8362d720325c" -version = "0.3.0" +version = "0.3.1" [[CategoricalArrays]] deps = ["Compat", "DataAPI", "Future", "JSON", "Missings", "Printf", "Reexport", "Statistics", "Unicode"] @@ -123,9 +123,9 @@ version = "3.2.0" [[CuArrays]] deps = ["AbstractFFTs", "Adapt", "CEnum", "CUDAapi", "CUDAdrv", "CUDAnative", "DataStructures", "GPUArrays", "Libdl", "LinearAlgebra", "MacroTools", "NNlib", "Printf", "Random", "Requires", "SparseArrays", "TimerOutputs"] -git-tree-sha1 = "51fbe053dea29ed2513e02d38380007310cf4c4b" +git-tree-sha1 = "4e536542c5c898b1bf43011b6187f3c97ebcc91e" uuid = "3a865a2d-5b23-5a0f-bc46-62713ec82fae" -version = "1.6.0" +version = "1.7.0" [[DataAPI]] git-tree-sha1 = "674b67f344687a88310213ddfa8a2b3c76cc4252" @@ -175,9 +175,9 @@ uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" [[Distributions]] deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns"] -git-tree-sha1 = "71a3f1ae1fca9ed876edfbc2079d7b7c27e2e3d5" +git-tree-sha1 = "6b19601c0e98de3a8964ed33ad73e130c7165b1d" uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.22.3" +version = "0.22.4" [[FFTW]] deps = ["AbstractFFTs", "FFTW_jll", "IntelOpenMP_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Reexport"] @@ -234,8 +234,8 @@ uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" version = "2.0.1" [[GeometricFlux]] -deps = ["CUDAapi", "DataStructures", "Flux", "IRTools", "LinearAlgebra", "Random", "Requires", "SparseArrays", "Statistics", "Zygote", "ZygoteRules"] -git-tree-sha1 = "9bebf1227738710e464f258ba687e5917639d82d" +deps = ["CUDAapi", "CUDAnative", "CuArrays", "DataStructures", "Flux", "IRTools", "LinearAlgebra", "Random", "Requires", "SparseArrays", "Statistics", "Zygote", "ZygoteRules"] +git-tree-sha1 = "4847c619dba6ee472eb81d0c25ae1632c3246e66" repo-rev = "master" repo-url = "https://github.com/yuehhua/GeometricFlux.jl.git" uuid = "7e08b658-56d3-11e9-2997-919d5b31e4ea" @@ -243,9 +243,9 @@ version = "0.2.0" [[IRTools]] deps = ["InteractiveUtils", "MacroTools", "Test"] -git-tree-sha1 = "72421971e60917b8cd7737f9577c4f0f87eab306" +git-tree-sha1 = "1a4355e4b5b50be2311ebb644f34f3306dbd0410" uuid = "7869d1d1-7146-5819-86e3-90919afe41df" -version = "0.3.0" +version = "0.3.1" [[IntelOpenMP_jll]] deps = ["Libdl", "Pkg"] @@ -355,9 +355,9 @@ version = "0.3.3" [[OpenBLAS_jll]] deps = ["Libdl", "Pkg"] -git-tree-sha1 = "3a6e5767e8ae022871c19162cc3ecd80748bd3dc" +git-tree-sha1 = "e2551d7c25d52f35b76d86a50917a3ba8988f519" uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.7+4" +version = "0.3.7+5" [[OpenSpecFun_jll]] deps = ["Libdl", "Pkg"] @@ -373,15 +373,15 @@ version = "1.1.0" [[PDMats]] deps = ["Arpack", "LinearAlgebra", "SparseArrays", "SuiteSparse", "Test"] -git-tree-sha1 = "035f8d60ba2a22cb1d2580b1e0e5ce0cb05e4563" +git-tree-sha1 = "5f303510529486bb02ac4d70da8295da38302194" uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" -version = "0.9.10" +version = "0.9.11" [[Parsers]] deps = ["Dates", "Test"] -git-tree-sha1 = "0139ba59ce9bc680e2925aec5b7db79065d60556" +git-tree-sha1 = "d112c19ccca00924d5d3a38b11ae2b4b268dda39" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "0.3.10" +version = "0.3.11" [[Pkg]] deps = ["Dates", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"] @@ -423,9 +423,9 @@ version = "0.2.0" [[Requires]] deps = ["UUIDs"] -git-tree-sha1 = "999513b7dea8ac17359ed50ae8ea089e4464e35e" +git-tree-sha1 = "d37400976e98018ee840e0ca4f9d20baa231dc6b" uuid = "ae029012-a4dd-5104-9daa-d747884805df" -version = "1.0.0" +version = "1.0.1" [[Revise]] deps = ["CodeTracking", "Distributed", "FileWatching", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "Pkg", "REPL", "UUIDs", "Unicode"] @@ -543,21 +543,21 @@ version = "0.6.2" [[ZipFile]] deps = ["Libdl", "Printf", "Zlib_jll"] -git-tree-sha1 = "5de8320a46812da1a8ca98b16a8a4546d44efa62" +git-tree-sha1 = "8748302cfdec02c4ae9c97b112cf10003f7f767f" uuid = "a5390f91-8eb1-5f08-bee0-b1d1ffed6cea" -version = "0.9.0" +version = "0.9.1" [[Zlib_jll]] deps = ["Libdl", "Pkg"] -git-tree-sha1 = "5618a43055eb09377edca21d19d0e99bce24a9c3" +git-tree-sha1 = "fd36a6739e256527287c5444960d0266712cd49e" uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.11+7" +version = "1.2.11+8" [[Zygote]] deps = ["DiffRules", "FFTW", "FillArrays", "ForwardDiff", "IRTools", "InteractiveUtils", "LinearAlgebra", "MacroTools", "NNlib", "NaNMath", "Random", "Requires", "SpecialFunctions", "Statistics", "ZygoteRules"] -git-tree-sha1 = "ca4dfa4de0a0e2c1da6c8c67d3b9af99645b57fc" +git-tree-sha1 = "54872ae5411c8795ed52852759796a04fb771f68" uuid = "e88e6eb3-aa80-5325-afca-941959d7151f" -version = "0.4.6" +version = "0.4.7" [[ZygoteRules]] deps = ["MacroTools"] diff --git a/test/GPU.jl b/test/GPU.jl index cfd97d90..d79bcb75 100644 --- a/test/GPU.jl +++ b/test/GPU.jl @@ -1,98 +1,48 @@ # using CUDA using CUDAnative using CuArrays -using Flux -using GeometricFlux - -features = rand(1_000, 10) -features_int = rand(UInt8, 1_000, 10) - -nbins = 20 -hist = zeros(Float32, 1, nbins) -δ = rand(Float32, 1, 10_000_000) -δ² = rand(Float32, 1, 10_000_000) -idx = rand(1:nbins, 10_000_000) -sub_idx = rand(1:nbins, 100_000) -set = collect(1:length(idx)) -sub_set = sort(rand(set, 100_000)) - -hist_gpu = CuArray(hist) -δ_gpu = CuArray(δ) -δ²_gpu = CuArray(δ²) -idx_gpu = CuArray(idx) -set_gpu = CuArray(set) - -@time sumpool(idx, δ) -@time sumpool(idx_gpu, δ_gpu) -@time scatter_add!(hist, δ, idx) - -function scatter_loop(hist, δ, idx) - for i in 1:10 - scatter_add!(hist, δ, idx) - end - return Array(hist) -end -@time hh = scatter_loop(hist_gpu, δ_gpu, idx_gpu) -println(hh) -CuArrays.@time scatter_add!(hist_gpu, δ_gpu, idx_gpu) - - -δ = rand(Float32, 100, 2_000_000) -δ² = rand(Float32, 100, 2_000_000) -δ_gpu = CuArray(δ) -δ²_gpu = CuArray(δ²) -CuArrays.@time CuArrays.scan!(+ ,δ²_gpu, δ_gpu,dims=1) -@time x = δ²_gpu[2,5] - -δ = rand(Float32, 1, 1_000) -hist_gpu = CuArray(hist) -δ_gpu = CuArray(δ[1:1000]) -idx_gpu = CuArray(idx[1:1000]) -scatter_add!(hist_gpu, δ_gpu, idx_gpu) -sumpool(idx[1:1000], δ) - -function split_cpu(hist, δ, idx, set) - @inbounds for i in set - hist[idx[i]] += δ[i] +# using Flux +# using GeometricFlux + +# CPU +function hist_cpu!(hist, δ, idx) + Threads.@threads for j in 1:size(idx,2) + @inbounds for i in 1:size(idx,1) + hist[idx[i], j] += δ[i,j] + end end return end -function split_gpu(hist, δ, idx, set) - @inbounds for i in set - hist[idx[i]] += δ[i] +# GPU +function hist_gpu!(h::CuMatrix{T}, x::CuArray{T}, id::CuArray{Int}; MAX_THREADS=256) where {T<:AbstractFloat} + function kernel!(h::CuDeviceArray{T}, x::CuDeviceArray{T}, id) + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + @inbounds if i <= size(id, 1) && j <= size(h, 2) + k = Base._to_linear_index(h, id[i,j], j) + CUDAnative.atomic_add!(pointer(h, k), x[i,j]) + end + return end - return + thread_i = min(MAX_THREADS, size(id, 1)) + thread_j = min(MAX_THREADS ÷ thread_i, size(h, 2)) + threads = (thread_i, thread_j) + blocks = ceil.(Int, (size(id, 1), size(h, 2)) ./ threads) + CuArrays.@cuda blocks=blocks threads=threads kernel!(h, x, id) + return h end -hist -@time split_cpu(hist, δ, idx, set) -@time split_gpu(hist, δ_gpu, idx, set) - -function gpu_add2!(y, x) - index = threadIdx().x - stride = blockDim().x - @inbounds for i = index:stride:length(y) - @inbounds y[i] += x[i] - end - return nothing -end +nbins = 20 +ncol = 100 +items = Int(1e6) +hist = zeros(Float32, nbins, ncol) +δ = rand(Float32, items, ncol) +idx = rand(1:nbins, items, ncol) -δ = rand(Float32, 1_000_000) -δ² = rand(Float32, 1_000_000) +hist_gpu = CuArray(hist) δ_gpu = CuArray(δ) -δ²_gpu = CuArray(δ²) -CuArrays.@time @cuda threads=256 gpu_add2!(δ_gpu, δ²_gpu) - - -function hist_test!(hist, idx, x) - index = threadIdx().x - stride = blockDim().x - for i = index:stride:length(x) - hist[idx[i]] += x[i] - end - return nothing -end +idx_gpu = CuArray(idx) -hist = zeros(Float32, nbins) -@time @cuda threads=256 hist_test!(hist_gpu, idx, δ_gpu) +@time hist_cpu!(hist, δ, idx) +@CuArrays.time hist_gpu!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=1024) From cce734748294fba568f18387de5a193b70fed19d Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Thu, 5 Mar 2020 11:28:11 -0500 Subject: [PATCH 06/29] gpu experiments --- test/GPU.jl | 46 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/test/GPU.jl b/test/GPU.jl index d79bcb75..da569846 100644 --- a/test/GPU.jl +++ b/test/GPU.jl @@ -14,17 +14,18 @@ function hist_cpu!(hist, δ, idx) return end -# GPU -function hist_gpu!(h::CuMatrix{T}, x::CuArray{T}, id::CuArray{Int}; MAX_THREADS=256) where {T<:AbstractFloat} - function kernel!(h::CuDeviceArray{T}, x::CuDeviceArray{T}, id) - i = threadIdx().x + (blockIdx().x - 1) * blockDim().x - j = threadIdx().y + (blockIdx().y - 1) * blockDim().y - @inbounds if i <= size(id, 1) && j <= size(h, 2) - k = Base._to_linear_index(h, id[i,j], j) - CUDAnative.atomic_add!(pointer(h, k), x[i,j]) - end - return +# GPU - naive approach +function kernel!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + @inbounds if i <= size(id, 1) && j <= size(h, 2) + k = Base._to_linear_index(h, id[i,j], j) + CUDAnative.atomic_add!(pointer(h, k), x[i,j]) end + return +end + +function hist_gpu!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}; MAX_THREADS=256) where {T<:AbstractFloat} thread_i = min(MAX_THREADS, size(id, 1)) thread_j = min(MAX_THREADS ÷ thread_i, size(h, 2)) threads = (thread_i, thread_j) @@ -45,4 +46,27 @@ hist_gpu = CuArray(hist) idx_gpu = CuArray(idx) @time hist_cpu!(hist, δ, idx) -@CuArrays.time hist_gpu!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=1024) +@CuArrays.time hist_gpu!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=512) + + +# GPU - 2-step approach +function kernel_1!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = blockIdx().y * blockDim().y + @inbounds if i <= size(id, 1) && j <= size(h, 2) + k = Base._to_linear_index(h, id[i,j], j) + CUDAnative.atomic_add!(pointer(h, k), x[i,j]) + end + return +end + +function hist_gpu!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}; MAX_THREADS=256) where {T<:AbstractFloat} + threads = min(MAX_THREADS, size(id, 1)) + blocks = ceil(Int, size(id, 1) ./ threads), size(h, 2) + println("threads: ", threads) + println("blocks: ", blocks) + CuArrays.@cuda blocks=blocks threads=threads kernel_1!(h, x, id) + return h +end + +@CuArrays.time hist_gpu!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=500) From efa8f248bb8c77daf2e8172771b2060020194580 Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Thu, 5 Mar 2020 20:19:49 -0500 Subject: [PATCH 07/29] gpu tests --- test/GPU.jl | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/test/GPU.jl b/test/GPU.jl index da569846..51018ce2 100644 --- a/test/GPU.jl +++ b/test/GPU.jl @@ -49,10 +49,46 @@ idx_gpu = CuArray(idx) @CuArrays.time hist_gpu!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=512) + + +# GPU - apply along the features axis +function kernel_y!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + @inbounds if i <= size(id, 1) && j <= size(h, 2) + k = Base._to_linear_index(h, id[i,j], j) + CUDAnative.atomic_add!(pointer(h, k), x[i,j]) + end + return +end + +function hist_gpu_y!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}; MAX_THREADS=256) where {T<:AbstractFloat} + thread_j = min(MAX_THREADS, size(id, 2)) + thread_i = min(MAX_THREADS ÷ thread_j, size(h, 1)) + threads = (thread_i, thread_j) + blocks = ceil.(Int, (size(id, 1), size(h, 2)) ./ threads) + CuArrays.@cuda blocks=blocks threads=threads kernel!(h, x, id) + return h +end + +# blockdim: (THREADS,1) +@CuArrays.time hist_gpu_y!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=1024) + +function test(h) + t = zero(eltype(h)) + for i in eachindex(h) + t += i + end + return t +end +test(hist_gpu) + + + # GPU - 2-step approach function kernel_1!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} i = threadIdx().x + (blockIdx().x - 1) * blockDim().x - j = blockIdx().y * blockDim().y + j = blockIdx().y @inbounds if i <= size(id, 1) && j <= size(h, 2) k = Base._to_linear_index(h, id[i,j], j) CUDAnative.atomic_add!(pointer(h, k), x[i,j]) @@ -69,4 +105,5 @@ function hist_gpu!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}; MAX_THREAD return h end -@CuArrays.time hist_gpu!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=500) +# blockdim: (THREADS,1) +@CuArrays.time hist_gpu!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=256) From 7f09c6a260c2a35ccf743a174d27dce37e17ec46 Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Fri, 13 Mar 2020 01:30:23 -0400 Subject: [PATCH 08/29] remove Manifest --- .gitignore | 2 +- Manifest.toml | 566 -------------------------------------------------- 2 files changed, 1 insertion(+), 567 deletions(-) delete mode 100644 Manifest.toml diff --git a/.gitignore b/.gitignore index 9410613f..d1ea93a3 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,6 @@ docs/site/ # It records a fixed state of all packages used by the project. As such, it should not be # committed for packages, but should be committed for applications that require a static # environment. -Manifest.toml +#Manifest.toml data/ diff --git a/Manifest.toml b/Manifest.toml deleted file mode 100644 index eec60d8d..00000000 --- a/Manifest.toml +++ /dev/null @@ -1,566 +0,0 @@ -# This file is machine-generated - editing it directly is not advised - -[[AbstractFFTs]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "051c95d6836228d120f5f4b984dd5aba1624f716" -uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" -version = "0.5.0" - -[[AbstractTrees]] -deps = ["Markdown"] -git-tree-sha1 = "940760b82db1f7090f7d16fe6e4b121cc181db45" -uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" -version = "0.3.1" - -[[Adapt]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "82dab828020b872fa9efd3abec1152b075bc7cbf" -uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "1.0.0" - -[[Arpack]] -deps = ["Arpack_jll", "Libdl", "LinearAlgebra"] -git-tree-sha1 = "2ff92b71ba1747c5fdd541f8fc87736d82f40ec9" -uuid = "7d9fca2a-8960-54d3-9f78-7d1dccf2cb97" -version = "0.4.0" - -[[Arpack_jll]] -deps = ["Libdl", "OpenBLAS_jll", "Pkg"] -git-tree-sha1 = "68a90a692ddc0eb72d69a6993ca26e2a923bf195" -uuid = "68821587-b530-5797-8361-c406ea357684" -version = "3.5.0+2" - -[[Base64]] -uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" - -[[BenchmarkTools]] -deps = ["JSON", "Printf", "Statistics"] -git-tree-sha1 = "90b73db83791c5f83155016dd1cc1f684d4e1361" -uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" -version = "0.4.3" - -[[BinaryProvider]] -deps = ["Libdl", "SHA"] -git-tree-sha1 = "5b08ed6036d9d3f0ee6369410b830f8873d4024c" -uuid = "b99e7846-7c00-51b0-8f62-c81ae34c0232" -version = "0.5.8" - -[[CEnum]] -git-tree-sha1 = "62847acab40e6855a9b5905ccb99c2b5cf6b3ebb" -uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" -version = "0.2.0" - -[[CSV]] -deps = ["CategoricalArrays", "DataFrames", "Dates", "FilePathsBase", "Mmap", "Parsers", "PooledArrays", "Tables", "Unicode", "WeakRefStrings"] -git-tree-sha1 = "fe9b828d5e7b55431d75d6d180ef843d69dea048" -uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" -version = "0.5.23" - -[[CUDAapi]] -deps = ["Libdl", "Logging"] -git-tree-sha1 = "56a813440ac98a1aa64672ab460a1512552211a7" -uuid = "3895d2a7-ec45-59b8-82bb-cfc6a382f9b3" -version = "2.1.0" - -[[CUDAdrv]] -deps = ["CEnum", "CUDAapi", "Printf"] -git-tree-sha1 = "5660775f2a3214420add960e1ff2baf46d5297cd" -uuid = "c5f51814-7f29-56b8-a69c-e4d8f6be1fde" -version = "5.1.0" - -[[CUDAnative]] -deps = ["Adapt", "CEnum", "CUDAapi", "CUDAdrv", "DataStructures", "InteractiveUtils", "LLVM", "Libdl", "Printf", "TimerOutputs"] -git-tree-sha1 = "e0c2805c9a7d338823c0d8f574242e284410fa61" -uuid = "be33ccc6-a3ff-5ff2-a52e-74243cff1e17" -version = "2.9.1" - -[[Cassette]] -git-tree-sha1 = "f6a148cadd38ba328bd2c03442037ef801a6aa05" -uuid = "7057c7e9-c182-5462-911a-8362d720325c" -version = "0.3.1" - -[[CategoricalArrays]] -deps = ["Compat", "DataAPI", "Future", "JSON", "Missings", "Printf", "Reexport", "Statistics", "Unicode"] -git-tree-sha1 = "23d7324164c89638c18f6d7f90d972fa9c4fa9fb" -uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597" -version = "0.7.7" - -[[CodeTracking]] -deps = ["InteractiveUtils", "UUIDs"] -git-tree-sha1 = "0becdab7e6fbbcb7b88d8de5b72e5bb2f28239f3" -uuid = "da1fd8a2-8d9e-5ec2-8556-3022fb5608a2" -version = "0.5.8" - -[[CodecZlib]] -deps = ["BinaryProvider", "Libdl", "TranscodingStreams"] -git-tree-sha1 = "05916673a2627dd91b4969ff8ba6941bc85a960e" -uuid = "944b1d66-785c-5afd-91f1-9de20f533193" -version = "0.6.0" - -[[ColorTypes]] -deps = ["FixedPointNumbers", "Random"] -git-tree-sha1 = "7b62b728a5f3dd6ee3b23910303ccf27e82fad5e" -uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" -version = "0.8.1" - -[[Colors]] -deps = ["ColorTypes", "FixedPointNumbers", "InteractiveUtils", "Printf", "Reexport"] -git-tree-sha1 = "c9c1845d6bf22e34738bee65c357a69f416ed5d1" -uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" -version = "0.9.6" - -[[CommonSubexpressions]] -deps = ["Test"] -git-tree-sha1 = "efdaf19ab11c7889334ca247ff4c9f7c322817b0" -uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" -version = "0.2.0" - -[[Compat]] -deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"] -git-tree-sha1 = "3819f476b6b37ef8ea837070ed831b4ebadfa1e9" -uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "3.2.0" - -[[CuArrays]] -deps = ["AbstractFFTs", "Adapt", "CEnum", "CUDAapi", "CUDAdrv", "CUDAnative", "DataStructures", "GPUArrays", "Libdl", "LinearAlgebra", "MacroTools", "NNlib", "Printf", "Random", "Requires", "SparseArrays", "TimerOutputs"] -git-tree-sha1 = "4e536542c5c898b1bf43011b6187f3c97ebcc91e" -uuid = "3a865a2d-5b23-5a0f-bc46-62713ec82fae" -version = "1.7.0" - -[[DataAPI]] -git-tree-sha1 = "674b67f344687a88310213ddfa8a2b3c76cc4252" -uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" -version = "1.1.0" - -[[DataFrames]] -deps = ["CategoricalArrays", "Compat", "DataAPI", "Future", "InvertedIndices", "IteratorInterfaceExtensions", "Missings", "PooledArrays", "Printf", "REPL", "Reexport", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] -git-tree-sha1 = "00136fcd39d503e66ab1b2eab800c47deaf7ca04" -uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" -version = "0.20.0" - -[[DataStructures]] -deps = ["InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "b7720de347734f4716d1815b00ce5664ed6bbfd4" -uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.17.9" - -[[DataValueInterfaces]] -git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" -uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" -version = "1.0.0" - -[[Dates]] -deps = ["Printf"] -uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" - -[[DelimitedFiles]] -deps = ["Mmap"] -uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" - -[[DiffResults]] -deps = ["StaticArrays"] -git-tree-sha1 = "da24935df8e0c6cf28de340b958f6aac88eaa0cc" -uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" -version = "1.0.2" - -[[DiffRules]] -deps = ["NaNMath", "Random", "SpecialFunctions"] -git-tree-sha1 = "10dca52cf6d4a62d82528262921daf63b99704a2" -uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" -version = "1.0.0" - -[[Distributed]] -deps = ["Random", "Serialization", "Sockets"] -uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" - -[[Distributions]] -deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns"] -git-tree-sha1 = "6b19601c0e98de3a8964ed33ad73e130c7165b1d" -uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.22.4" - -[[FFTW]] -deps = ["AbstractFFTs", "FFTW_jll", "IntelOpenMP_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Reexport"] -git-tree-sha1 = "109d82fa4b00429f9afcce873e9f746f11f018d3" -uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" -version = "1.2.0" - -[[FFTW_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "05674f209a6e3387dd103a945b0113eeb64b1a58" -uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" -version = "3.3.9+3" - -[[FilePathsBase]] -deps = ["Dates", "LinearAlgebra", "Printf", "Test", "UUIDs"] -git-tree-sha1 = "2cd6e2e7965934f72cb80251f760228e2264bab3" -uuid = "48062228-2e41-5def-b9a4-89aafe57970f" -version = "0.7.0" - -[[FileWatching]] -uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" - -[[FillArrays]] -deps = ["LinearAlgebra", "Random", "SparseArrays"] -git-tree-sha1 = "fec413d4fc547992eb62a5c544cedb6d7853c1f5" -uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "0.8.4" - -[[FixedPointNumbers]] -git-tree-sha1 = "d14a6fa5890ea3a7e5dcab6811114f132fec2b4b" -uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" -version = "0.6.1" - -[[Flux]] -deps = ["AbstractTrees", "Adapt", "CodecZlib", "Colors", "CuArrays", "DelimitedFiles", "Juno", "MacroTools", "NNlib", "Pkg", "Printf", "Random", "Reexport", "SHA", "Statistics", "StatsBase", "Test", "ZipFile", "Zygote"] -git-tree-sha1 = "8134adbb0f10b0d22b22f8b4299d0d20509edc5f" -uuid = "587475ba-b771-5e3f-ad9e-33799f191a9c" -version = "0.10.1" - -[[ForwardDiff]] -deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "NaNMath", "Random", "SpecialFunctions", "StaticArrays"] -git-tree-sha1 = "88b082d492be6b63f967b6c96b352e25ced1a34c" -uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "0.10.9" - -[[Future]] -deps = ["Random"] -uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" - -[[GPUArrays]] -deps = ["AbstractFFTs", "Adapt", "LinearAlgebra", "Printf", "Random", "Serialization"] -git-tree-sha1 = "e756da6cee76a5f1436a05827fa8fdf3badc577f" -uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" -version = "2.0.1" - -[[GeometricFlux]] -deps = ["CUDAapi", "CUDAnative", "CuArrays", "DataStructures", "Flux", "IRTools", "LinearAlgebra", "Random", "Requires", "SparseArrays", "Statistics", "Zygote", "ZygoteRules"] -git-tree-sha1 = "4847c619dba6ee472eb81d0c25ae1632c3246e66" -repo-rev = "master" -repo-url = "https://github.com/yuehhua/GeometricFlux.jl.git" -uuid = "7e08b658-56d3-11e9-2997-919d5b31e4ea" -version = "0.2.0" - -[[IRTools]] -deps = ["InteractiveUtils", "MacroTools", "Test"] -git-tree-sha1 = "1a4355e4b5b50be2311ebb644f34f3306dbd0410" -uuid = "7869d1d1-7146-5819-86e3-90919afe41df" -version = "0.3.1" - -[[IntelOpenMP_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "fb8e1c7a5594ba56f9011310790e03b5384998d6" -uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" -version = "2018.0.3+0" - -[[InteractiveUtils]] -deps = ["Markdown"] -uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" - -[[InvertedIndices]] -deps = ["Test"] -git-tree-sha1 = "15732c475062348b0165684ffe28e85ea8396afc" -uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" -version = "1.0.0" - -[[IteratorInterfaceExtensions]] -git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" -uuid = "82899510-4779-5014-852e-03e436cf321d" -version = "1.0.0" - -[[JSON]] -deps = ["Dates", "Mmap", "Parsers", "Unicode"] -git-tree-sha1 = "b34d7cef7b337321e97d22242c3c2b91f476748e" -uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "0.21.0" - -[[JuliaInterpreter]] -deps = ["CodeTracking", "InteractiveUtils", "Random", "UUIDs"] -git-tree-sha1 = "a4f675340a109713f74c47a2b499df06f800c8d0" -uuid = "aa1ae85d-cabe-5617-a682-6adf51b2e16a" -version = "0.7.8" - -[[Juno]] -deps = ["Base64", "Logging", "Media", "Profile", "Test"] -git-tree-sha1 = "30d94657a422d09cb97b6f86f04f750fa9c50df8" -uuid = "e5e0dc1b-0480-54bc-9374-aad01c23163d" -version = "0.7.2" - -[[LLVM]] -deps = ["CEnum", "Libdl", "Printf", "Unicode"] -git-tree-sha1 = "1d08d7e4250f452f6cb20e4574daaebfdbee0ff7" -uuid = "929cbde3-209d-540e-8aea-75f648917ca0" -version = "1.3.3" - -[[LibGit2]] -uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" - -[[Libdl]] -uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" - -[[LinearAlgebra]] -deps = ["Libdl"] -uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - -[[Logging]] -uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" - -[[LoweredCodeUtils]] -deps = ["JuliaInterpreter"] -git-tree-sha1 = "b416a30717e9109fffd4d9869f2f962b5dca3162" -uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b" -version = "0.4.2" - -[[MKL_jll]] -deps = ["IntelOpenMP_jll", "Libdl", "Pkg"] -git-tree-sha1 = "720629cc8cbd12c146ca01b661fd1a6cf66e2ff4" -uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" -version = "2019.0.117+2" - -[[MacroTools]] -deps = ["DataStructures", "Markdown", "Random"] -git-tree-sha1 = "e2fc7a55bb2224e203bbd8b59f72b91323233458" -uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.3" - -[[Markdown]] -deps = ["Base64"] -uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" - -[[Media]] -deps = ["MacroTools", "Test"] -git-tree-sha1 = "75a54abd10709c01f1b86b84ec225d26e840ed58" -uuid = "e89f7d12-3494-54d1-8411-f7d8b9ae1f27" -version = "0.5.0" - -[[Missings]] -deps = ["DataAPI"] -git-tree-sha1 = "de0a5ce9e5289f27df672ffabef4d1e5861247d5" -uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" -version = "0.4.3" - -[[Mmap]] -uuid = "a63ad114-7e13-5084-954f-fe012c677804" - -[[NNlib]] -deps = ["BinaryProvider", "Libdl", "LinearAlgebra", "Requires", "Statistics"] -git-tree-sha1 = "755c0bab3912ff782167e1b4b774b833f8a0e550" -uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" -version = "0.6.4" - -[[NaNMath]] -git-tree-sha1 = "928b8ca9b2791081dc71a51c55347c27c618760f" -uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" -version = "0.3.3" - -[[OpenBLAS_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "e2551d7c25d52f35b76d86a50917a3ba8988f519" -uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.7+5" - -[[OpenSpecFun_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "65f672edebf3f4e613ddf37db9dcbd7a407e5e90" -uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" -version = "0.5.3+1" - -[[OrderedCollections]] -deps = ["Random", "Serialization", "Test"] -git-tree-sha1 = "c4c13474d23c60d20a67b217f1d7f22a40edf8f1" -uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.1.0" - -[[PDMats]] -deps = ["Arpack", "LinearAlgebra", "SparseArrays", "SuiteSparse", "Test"] -git-tree-sha1 = "5f303510529486bb02ac4d70da8295da38302194" -uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" -version = "0.9.11" - -[[Parsers]] -deps = ["Dates", "Test"] -git-tree-sha1 = "d112c19ccca00924d5d3a38b11ae2b4b268dda39" -uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "0.3.11" - -[[Pkg]] -deps = ["Dates", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"] -uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" - -[[PooledArrays]] -deps = ["DataAPI"] -git-tree-sha1 = "b1333d4eced1826e15adbdf01a4ecaccca9d353c" -uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" -version = "0.5.3" - -[[Printf]] -deps = ["Unicode"] -uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" - -[[Profile]] -deps = ["Printf"] -uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" - -[[QuadGK]] -deps = ["DataStructures", "LinearAlgebra"] -git-tree-sha1 = "dc84e810393cfc6294248c9032a9cdacc14a3db4" -uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" -version = "2.3.1" - -[[REPL]] -deps = ["InteractiveUtils", "Markdown", "Sockets"] -uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" - -[[Random]] -deps = ["Serialization"] -uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" - -[[Reexport]] -deps = ["Pkg"] -git-tree-sha1 = "7b1d07f411bc8ddb7977ec7f377b97b158514fe0" -uuid = "189a3867-3050-52da-a836-e630ba90ab69" -version = "0.2.0" - -[[Requires]] -deps = ["UUIDs"] -git-tree-sha1 = "d37400976e98018ee840e0ca4f9d20baa231dc6b" -uuid = "ae029012-a4dd-5104-9daa-d747884805df" -version = "1.0.1" - -[[Revise]] -deps = ["CodeTracking", "Distributed", "FileWatching", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "Pkg", "REPL", "UUIDs", "Unicode"] -git-tree-sha1 = "2ecbd19f31a934b035bfc38036d5f7ac575d0878" -uuid = "295af30f-e4ad-537b-8983-00126c2a3abe" -version = "2.5.0" - -[[Rmath]] -deps = ["BinaryProvider", "Libdl", "Random", "Statistics"] -git-tree-sha1 = "2bbddcb984a1d08612d0c4abb5b4774883f6fa98" -uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" -version = "0.6.0" - -[[SHA]] -uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" - -[[Serialization]] -uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" - -[[SharedArrays]] -deps = ["Distributed", "Mmap", "Random", "Serialization"] -uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" - -[[Sockets]] -uuid = "6462fe0b-24de-5631-8697-dd941f90decc" - -[[SortingAlgorithms]] -deps = ["DataStructures", "Random", "Test"] -git-tree-sha1 = "03f5898c9959f8115e30bc7226ada7d0df554ddd" -uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" -version = "0.3.1" - -[[SparseArrays]] -deps = ["LinearAlgebra", "Random"] -uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - -[[SpecialFunctions]] -deps = ["OpenSpecFun_jll"] -git-tree-sha1 = "268052ee908b2c086cc0011f528694f02f3e2408" -uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "0.9.0" - -[[StaticArrays]] -deps = ["LinearAlgebra", "Random", "Statistics"] -git-tree-sha1 = "5a3bcb6233adabde68ebc97be66e95dcb787424c" -uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "0.12.1" - -[[Statistics]] -deps = ["LinearAlgebra", "SparseArrays"] -uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" - -[[StatsBase]] -deps = ["DataAPI", "DataStructures", "LinearAlgebra", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics"] -git-tree-sha1 = "c53e809e63fe5cf5de13632090bc3520649c9950" -uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.32.0" - -[[StatsFuns]] -deps = ["Rmath", "SpecialFunctions"] -git-tree-sha1 = "79982835d2ff3970685cb704500909c94189bde9" -uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" -version = "0.9.3" - -[[SuiteSparse]] -deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] -uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" - -[[TableTraits]] -deps = ["IteratorInterfaceExtensions"] -git-tree-sha1 = "b1ad568ba658d8cbb3b892ed5380a6f3e781a81e" -uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" -version = "1.0.0" - -[[Tables]] -deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "TableTraits", "Test"] -git-tree-sha1 = "aaed7b3b00248ff6a794375ad6adf30f30ca5591" -uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" -version = "0.2.11" - -[[Test]] -deps = ["Distributed", "InteractiveUtils", "Logging", "Random"] -uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[[TimerOutputs]] -deps = ["Printf"] -git-tree-sha1 = "311765af81bbb48d7bad01fb016d9c328c6ede03" -uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" -version = "0.5.3" - -[[Traceur]] -deps = ["Cassette", "InteractiveUtils", "Logging", "MacroTools", "Test"] -git-tree-sha1 = "c007db8fbec24668a7cdf4a878202abb648d568f" -uuid = "37b6cedf-1f77-55f8-9503-c64b63398394" -version = "0.3.0" - -[[TranscodingStreams]] -deps = ["Random", "Test"] -git-tree-sha1 = "7c53c35547de1c5b9d46a4797cf6d8253807108c" -uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.9.5" - -[[UUIDs]] -deps = ["Random", "SHA"] -uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" - -[[Unicode]] -uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" - -[[WeakRefStrings]] -deps = ["DataAPI", "Random", "Test"] -git-tree-sha1 = "28807f85197eaad3cbd2330386fac1dcb9e7e11d" -uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" -version = "0.6.2" - -[[ZipFile]] -deps = ["Libdl", "Printf", "Zlib_jll"] -git-tree-sha1 = "8748302cfdec02c4ae9c97b112cf10003f7f767f" -uuid = "a5390f91-8eb1-5f08-bee0-b1d1ffed6cea" -version = "0.9.1" - -[[Zlib_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "fd36a6739e256527287c5444960d0266712cd49e" -uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.11+8" - -[[Zygote]] -deps = ["DiffRules", "FFTW", "FillArrays", "ForwardDiff", "IRTools", "InteractiveUtils", "LinearAlgebra", "MacroTools", "NNlib", "NaNMath", "Random", "Requires", "SpecialFunctions", "Statistics", "ZygoteRules"] -git-tree-sha1 = "54872ae5411c8795ed52852759796a04fb771f68" -uuid = "e88e6eb3-aa80-5325-afca-941959d7151f" -version = "0.4.7" - -[[ZygoteRules]] -deps = ["MacroTools"] -git-tree-sha1 = "b3b4882cc9accf6731a08cc39543fbc6b669dca8" -uuid = "700de1a5-db45-46bc-99cf-38207098b444" -version = "0.2.0" From 2ce5cf28e192cbe4393391cb087a881c4ba94fc2 Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Fri, 13 Mar 2020 01:30:47 -0400 Subject: [PATCH 09/29] remove Manifest --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index d1ea93a3..9410613f 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,6 @@ docs/site/ # It records a fixed state of all packages used by the project. As such, it should not be # committed for packages, but should be committed for applications that require a static # environment. -#Manifest.toml +Manifest.toml data/ From 3aa45cd23375b2c102279de01be380bacae01680 Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Fri, 13 Mar 2020 01:32:31 -0400 Subject: [PATCH 10/29] CUDA dependencies --- Project.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Project.toml b/Project.toml index 05436a8e..9bb7f082 100644 --- a/Project.toml +++ b/Project.toml @@ -4,7 +4,9 @@ authors = ["jeremiedb "] version = "0.4.6" [deps] +CUDAnative = "be33ccc6-a3ff-5ff2-a52e-74243cff1e17" CategoricalArrays = "324d7699-5711-5eae-9e2f-1d82baa6b597" +CuArrays = "3a865a2d-5b23-5a0f-bc46-62713ec82fae" Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" MLJModelInterface = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" From 686dde364a61720a5599896a374ce6e3976edef3 Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Sat, 14 Mar 2020 09:49:31 -0400 Subject: [PATCH 11/29] sync gpu --- test/GPU.jl | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/test/GPU.jl b/test/GPU.jl index 51018ce2..df61c17c 100644 --- a/test/GPU.jl +++ b/test/GPU.jl @@ -34,7 +34,7 @@ function hist_gpu!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}; MAX_THREAD return h end -nbins = 20 +nbins = 32 ncol = 100 items = Int(1e6) hist = zeros(Float32, nbins, ncol) @@ -62,17 +62,55 @@ function kernel_y!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:Abs return end +# GPU - apply along the features axis - seems not good +function kernel_y2!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + @inbounds if i <= size(id, 1) && j <= size(h, 2) + # k = Base._to_linear_index(h, id[i,j], j) + h[id[i,j],j] += x[i,j] + end + return +end + function hist_gpu_y!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}; MAX_THREADS=256) where {T<:AbstractFloat} thread_j = min(MAX_THREADS, size(id, 2)) thread_i = min(MAX_THREADS ÷ thread_j, size(h, 1)) threads = (thread_i, thread_j) blocks = ceil.(Int, (size(id, 1), size(h, 2)) ./ threads) - CuArrays.@cuda blocks=blocks threads=threads kernel!(h, x, id) + CuArrays.@cuda blocks=blocks threads=threads kernel_y!(h, x, id) return h end # blockdim: (THREADS,1) @CuArrays.time hist_gpu_y!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=1024) +@CuArrays.time CuArrays.sum(δ_gpu) + + +# GPU - apply along the features axis +function kernel_share_y!(h::CuDeviceArray{T,3}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + @inbounds if i <= size(id, 1) && j <= size(h, 3) + # k = Base._to_linear_index(h, blockIdx().x, id[i,j], j) # add the blok id index + CUDAnative.atomic_add!(pointer(h, 21), x[i,j]) + # h[1, id[i,j], j] += x[i,j] + end + return +end + +function hist_gpu_share_y!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}; MAX_THREADS=256) where {T<:AbstractFloat} + thread_j = min(MAX_THREADS, size(id, 2)) + thread_i = min(MAX_THREADS ÷ thread_j, size(h, 1)) + threads = (thread_i, thread_j) + blocks = ceil.(Int, (size(id, 1), size(h, 2)) ./ threads) + shared_h = CUDAnative.@cuStaticSharedMem(Float32, (blocks[1], 32, 100)) + CuArrays.@cuda blocks=blocks threads=threads kernel_share_y!(shared_h, x, id) # build on shared_mem + return shared_h +end + +@CuArrays.time hist_gpu_share_y!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=1024) +x1, x2 = hist_gpu_share_y!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=1024) function test(h) t = zero(eltype(h)) From b2e2dfb8ce2c5c6d4c48066c9e6b1aa2c1cf49ad Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Tue, 21 Apr 2020 01:21:31 -0400 Subject: [PATCH 12/29] sync --- src/find_split_gpu.jl | 94 ++++++++++++++++ src/fit_gpu.jl | 253 ++++++++++++++++++++++++++++++++++++++++++ test/GPU.jl | 20 ++-- 3 files changed, 357 insertions(+), 10 deletions(-) create mode 100644 src/find_split_gpu.jl create mode 100644 src/fit_gpu.jl diff --git a/src/find_split_gpu.jl b/src/find_split_gpu.jl new file mode 100644 index 00000000..726479bb --- /dev/null +++ b/src/find_split_gpu.jl @@ -0,0 +1,94 @@ +# GPU - apply along the features axis +function kernel_v1!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + @inbounds if i <= size(id, 1) && j <= size(h, 2) + k = Base._to_linear_index(h, id[i,j], j) + CUDAnative.atomic_add!(pointer(h, k), x[i,j]) + end + return +end + +function hist_gpu_v1!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}; MAX_THREADS=512) where {T<:AbstractFloat} + thread_j = min(MAX_THREADS, size(id, 2)) + thread_i = min(MAX_THREADS ÷ thread_j, size(h, 1)) + threads = (thread_i, thread_j) + blocks = ceil.(Int, (size(id, 1), size(h, 2)) ./ threads) + CuArrays.@cuda blocks=blocks threads=threads kernel_v1!(h, x, id) + return h +end + +function update_hist_gpu!(hist_δ::Matrix{SVector{L,T}}, hist_δ²::Matrix{SVector{L,T}}, hist_𝑤::Matrix{SVector{1,T}}, + δ::Vector{SVector{L,T}}, δ²::Vector{SVector{L,T}}, 𝑤::Vector{SVector{1,T}}, + X_bin, node::TrainNode{L,T,S}) where {L,T,S} + + hist_δ .*= 0.0 + hist_δ² .*= 0.0 + hist_𝑤 .*= 0.0 + + hist_gpu_v1!(hist_δ, δ, id) + hist_gpu_v1!(hist_δ², δ², id) + hist_gpu_v1!(hist_𝑤, 𝑤, id) + # @inbounds @threads for j in node.𝑗 + # @inbounds for i in node.𝑖 + # hist_δ[X_bin[i,j], j] += δ[i] + # hist_δ²[X_bin[i,j], j] += δ²[i] + # hist_𝑤[X_bin[i,j], j] += 𝑤[i] + # end + # end +end + +function find_split_gpu!(hist_δ::AbstractVector{SVector{L,T}}, hist_δ²::AbstractVector{SVector{L,T}}, hist_𝑤::AbstractVector{SVector{1,T}}, + params::EvoTypes, node::TrainNode{L,T,S}, info::SplitInfo{L,T,S}, edges::Vector{T}) where {L,T,S} + + # initialize tracking + ∑δL = node.∑δ * 0 + ∑δ²L = node.∑δ² * 0 + ∑𝑤L = node.∑𝑤 * 0 + ∑δR = node.∑δ + ∑δ²R = node.∑δ² + ∑𝑤R = node.∑𝑤 + + @inbounds for bin in 1:(length(hist_δ)-1) + ∑δL += hist_δ[bin] + ∑δ²L += hist_δ²[bin] + ∑𝑤L += hist_𝑤[bin] + ∑δR -= hist_δ[bin] + ∑δ²R -= hist_δ²[bin] + ∑𝑤R -= hist_𝑤[bin] + + gainL, gainR = get_gain(params.loss, ∑δL, ∑δ²L, ∑𝑤L, params.λ), get_gain(params.loss, ∑δR, ∑δ²R, ∑𝑤R, params.λ) + gain = gainL + gainR + + if gain > info.gain && ∑𝑤L[1] >= params.min_weight + 1e-12 && ∑𝑤R[1] >= params.min_weight + 1e-12 + info.gain = gain + info.gainL = gainL + info.gainR = gainR + info.∑δL = ∑δL + info.∑δ²L = ∑δ²L + info.∑𝑤L = ∑𝑤L + info.∑δR = ∑δR + info.∑δ²R = ∑δ²R + info.∑𝑤R = ∑𝑤R + info.cond = edges[bin] + info.𝑖 = bin + end # info update if gain + end # loop on bins +end + + +function find_split_gpu_test!(hist_δ::Vector{SVector{L,T}}, hist_δ²::Vector{SVector{L,T}}, hist_𝑤::Vector{SVector{1,T}}, bins::Vector{BitSet}, X_bin, δ::Vector{SVector{L,T}}, δ²::Vector{SVector{L,T}}, 𝑤::Vector{SVector{1,T}}, ∑δ::SVector{L,T}, ∑δ²::SVector{L,T}, ∑𝑤::SVector{1,T}, params::EvoTreeRegressor, info::SplitInfo{L,T,S}, edges::Vector{T}, set::Vector{S}) where {L,T,S} + + # initialize histogram + hist_δ .*= 0.0 + hist_δ² .*= 0.0 + hist_𝑤 .*= 0.0 + + # build histogram + @inbounds for i in set + hist_δ[X_bin[i]] += δ[i] + hist_δ²[X_bin[i]] += δ²[i] + hist_𝑤[X_bin[i]] += 𝑤[i] + end + return +end diff --git a/src/fit_gpu.jl b/src/fit_gpu.jl new file mode 100644 index 00000000..e16ca744 --- /dev/null +++ b/src/fit_gpu.jl @@ -0,0 +1,253 @@ +# initialise evotree +function init_evotree_gpu(params::EvoTypes, + X::AbstractMatrix{R}, Y::AbstractVector{S}; verbosity=1) where {R,S} + + seed!(params.seed) + + K = 1 + levels = "" + if typeof(params.loss) == Logistic + Y = Float32.(Y) + μ = fill(logit(mean(Y)), 1) + elseif typeof(params.loss) == Poisson + Y = Float32.(Y) + μ = fill(log(mean(Y)), 1) + elseif typeof(params.loss) == Softmax + if typeof(Y) <: AbstractCategoricalVector + levels = CategoricalArray(CategoricalArrays.levels(Y)) + K = length(levels) + μ = zeros(Float32, K) + Y = MLJModelInterface.int.(Y) + else + levels = CategoricalArray(sort(unique(Y))) + K = length(levels) + μ = zeros(Float32, K) + Y = UInt32.(Y) + end + elseif typeof(params.loss) == Gaussian + K = 2 + Y = Float32.(Y) + μ = SVector{2}([mean(Y), log(var(Y))]) + else + Y = Float32.(Y) + μ = fill(mean(Y), 1) + end + + # initialize preds + pred = zeros(SVector{K,Float32}, size(X,1)) + for i in eachindex(pred) + pred[i] += μ + end + + bias = Tree([TreeNode(SVector{K,Float32}(μ))]) + evotree = GBTree([bias], params, Metric(), K, levels) + + X_size = size(X) + 𝑖_ = collect(1:X_size[1]) + 𝑗_ = collect(1:X_size[2]) + + # initialize gradients and weights + δ, δ² = zeros(SVector{evotree.K, Float32}, X_size[1]), zeros(SVector{evotree.K, Float32}, X_size[1]) + 𝑤 = zeros(SVector{1, Float32}, X_size[1]) + 𝑤_ini = SVector{1, Float32}(1) + for i in 1:length(𝑤) + 𝑤[i] += 𝑤_ini + end + + # binarize data into quantiles + edges = get_edges(X, params.nbins) + X_bin = binarize(X, edges) + + + # initializde histograms + hist_δ = Vector{Matrix{SVector{evotree.K, Float32}}}(undef, 2^params.max_depth-1) + hist_δ² = Vector{Matrix{SVector{evotree.K, Float32}}}(undef, 2^params.max_depth-1) + hist_𝑤 = Vector{Matrix{SVector{1, Float32}}}(undef, 2^params.max_depth-1) + + # initialize train nodes + train_nodes = Vector{TrainNode{evotree.K, Float32, Int64}}(undef, 2^params.max_depth-1) + + for node in 1:2^params.max_depth-1 + train_nodes[node] = TrainNode(0, 0, SVector{evotree.K, Float32}(fill(Float32(-Inf), evotree.K)), SVector{evotree.K, Float32}(fill(Float32(-Inf), evotree.K)), SVector{1, Float32}(fill(Float32(-Inf), 1)), Float32(-Inf), [0], [0]) + + hist_δ[node] = zeros(SVector{evotree.K, Float32}, params.nbins, X_size[2]) + hist_δ²[node] = zeros(SVector{evotree.K, Float32}, params.nbins, X_size[2]) + hist_𝑤[node] = zeros(SVector{1, Float32}, params.nbins, X_size[2]) + end + + splits = Vector{SplitInfo{evotree.K, Float32, Int64}}(undef, X_size[2]) + for feat in 𝑗_ + splits[feat] = SplitInfo{evotree.K, Float32, Int}(Float32(-Inf), SVector{evotree.K, Float32}(zeros(evotree.K)), SVector{evotree.K, Float32}(zeros(evotree.K)), SVector{1, Float32}(zeros(1)), SVector{evotree.K, Float32}(zeros(evotree.K)), SVector{evotree.K, Float32}(zeros(evotree.K)), SVector{1, Float32}(zeros(1)), Float32(-Inf), Float32(-Inf), 0, feat, 0.0) + end + + cache = (params=deepcopy(params), + X=X, Y=Y, pred=pred, + 𝑖_=𝑖_, 𝑗_=𝑗_, δ=δ, δ²=δ², 𝑤=𝑤, + edges=edges, X_bin=X_bin, + train_nodes=train_nodes, splits=splits, + hist_δ=hist_δ, hist_δ²=hist_δ², hist_𝑤=hist_𝑤) + + cache.params.nrounds = 0 + + return evotree, cache +end + + +function grow_evotree_gpu!(evotree::GBTree, cache; verbosity=1) + + # initialize from cache + params = evotree.params + train_nodes = cache.train_nodes + splits = cache.splits + X_size = size(cache.X_bin) + δnrounds = params.nrounds - cache.params.nrounds + + # loop over nrounds + for i in 1:δnrounds + + # select random rows and cols + 𝑖 = cache.𝑖_[sample(cache.𝑖_, ceil(Int, params.rowsample * X_size[1]), replace=false, ordered=true)] + 𝑗 = cache.𝑗_[sample(cache.𝑗_, ceil(Int, params.colsample * X_size[2]), replace=false, ordered=true)] + # reset gain to -Inf + for feat in cache.𝑗_ + splits[feat].gain = Float32(-Inf) + end + + # build a new tree + update_grads!(params.loss, params.α, cache.pred, cache.Y, cache.δ, cache.δ², cache.𝑤) + ∑δ, ∑δ², ∑𝑤 = sum(cache.δ[𝑖]), sum(cache.δ²[𝑖]), sum(cache.𝑤[𝑖]) + gain = get_gain(params.loss, ∑δ, ∑δ², ∑𝑤, params.λ) + # assign a root and grow tree + train_nodes[1] = TrainNode(0, 1, ∑δ, ∑δ², ∑𝑤, gain, 𝑖, 𝑗) + tree = grow_tree_gpu(cache.δ, cache.δ², cache.𝑤, cache.hist_δ, cache.hist_δ², cache.hist_𝑤, params, train_nodes, splits, cache.edges, cache.X_bin) + push!(evotree.trees, tree) + predict!(cache.pred, tree, cache.X) + + end #end of nrounds + + cache.params.nrounds = params.nrounds + # cache = (deepcopy(params), X, Y, pred, 𝑖_, 𝑗_, δ, δ², 𝑤, edges, X_bin, train_nodes, splits, hist_δ, hist_δ², hist_𝑤) + # return model, cache + return evotree +end + +# grow a single tree +function grow_tree_gpu(δ, δ², 𝑤, + hist_δ, hist_δ², hist_𝑤, + params::EvoTypes, + train_nodes::Vector{TrainNode{L,T,S}}, + splits::Vector{SplitInfo{L,T,Int}}, + edges, X_bin) where {R<:Real, T<:AbstractFloat, S<:Int, L} + + active_id = ones(Int, 1) + leaf_count = one(Int) + tree_depth = one(Int) + tree = Tree(Vector{TreeNode{L, T, Int, Bool}}()) + + # grow while there are remaining active nodes + while size(active_id, 1) > 0 && tree_depth <= params.max_depth + next_active_id = ones(Int, 0) + # grow nodes + for id in active_id + node = train_nodes[id] + if tree_depth == params.max_depth || node.∑𝑤[1] <= params.min_weight + 1e-12 # rounding needed from histogram substraction + push!(tree.nodes, TreeNode(pred_leaf(params.loss, node, params, δ²))) + else + if id > 1 && id == tree.nodes[node.parent].right + # println("id is right:", id) + hist_δ[id] .= hist_δ[node.parent] .- hist_δ[id-1] + hist_δ²[id] .= hist_δ²[node.parent] .- hist_δ²[id-1] + hist_𝑤[id] .= hist_𝑤[node.parent] .- hist_𝑤[id-1] + else + # println("id is left:", id) + update_hist_gpu!(hist_δ[id], hist_δ²[id], hist_𝑤[id], δ, δ², 𝑤, X_bin, node) + end + for j in node.𝑗 + splits[j].gain = node.gain + find_split_gpu!(view(hist_δ[id],:,j), view(hist_δ²[id],:,j), view(hist_𝑤[id],:,j), params, node, splits[j], edges[j]) + end + + best = get_max_gain(splits) + # grow node if best split improves gain + if best.gain > node.gain + params.γ + left, right = update_set(node.𝑖, best.𝑖, view(X_bin,:,best.feat)) + # println("id: ∑𝑤/length(node/left/right) / ", id, " : ", node.∑𝑤, " / ", length(node.𝑖), " / ", length(left), " / ", length(right), " / ", best.𝑖) + train_nodes[leaf_count + 1] = TrainNode(id, node.depth + 1, best.∑δL, best.∑δ²L, best.∑𝑤L, best.gainL, left, node.𝑗) + train_nodes[leaf_count + 2] = TrainNode(id, node.depth + 1, best.∑δR, best.∑δ²R, best.∑𝑤R, best.gainR, right, node.𝑗) + push!(tree.nodes, TreeNode(leaf_count + 1, leaf_count + 2, best.feat, best.cond, best.gain-node.gain, L)) + push!(next_active_id, leaf_count + 1) + push!(next_active_id, leaf_count + 2) + leaf_count += 2 + else + push!(tree.nodes, TreeNode(pred_leaf(params.loss, node, params, δ²))) + end # end of single node split search + end + end # end of loop over active ids for a given depth + active_id = next_active_id + tree_depth += 1 + end # end of tree growth + return tree +end + +# extract the gain value from the vector of best splits and return the split info associated with best split +function get_max_gain(splits::Vector{SplitInfo{L,T,S}}) where {L,T,S} + gains = (x -> x.gain).(splits) + feat = findmax(gains)[2] + best = splits[feat] + return best +end + +function fit_evotree_gpu(params, X_train, Y_train; + X_eval=nothing, Y_eval=nothing, + early_stopping_rounds=9999, + eval_every_n=1, + print_every_n=9999, + verbosity=1) + + # initialize metric + iter_since_best = 0 + if params.metric != :none + metric_track = Metric() + metric_best = Metric() + end + + nrounds_max = params.nrounds + params.nrounds = 0 + model, cache = init_evotree(params, X_train, Y_train) + iter = 1 + + if params.metric != :none && X_eval !== nothing + pred_eval = predict(model.trees[1], X_eval, model.K) + Y_eval = convert.(eltype(cache.Y), Y_eval) + end + + while model.params.nrounds < nrounds_max && iter_since_best < early_stopping_rounds + model.params.nrounds += 1 + grow_evotree_gpu!(model, cache) + # callback function + if params.metric != :none + if X_eval !== nothing + predict!(pred_eval, model.trees[model.params.nrounds+1], X_eval) + metric_track.metric = eval_metric(Val{params.metric}(), pred_eval, Y_eval, params.α) + else + metric_track.metric = eval_metric(Val{params.metric}(), cache.pred, cache.Y, params.α) + end + if metric_track.metric < metric_best.metric + metric_best.metric = metric_track.metric + metric_best.iter = model.params.nrounds + iter_since_best = 0 + else + iter_since_best += 1 + end + if mod(model.params.nrounds, print_every_n) == 0 && verbosity > 0 + display(string("iter:", model.params.nrounds, ", eval: ", metric_track.metric)) + end + end # end of callback + end + if params.metric != :none + model.metric.iter = metric_best.iter + model.metric.metric = metric_best.metric + end + params.nrounds = nrounds_max + return model +end diff --git a/test/GPU.jl b/test/GPU.jl index df61c17c..f82303e0 100644 --- a/test/GPU.jl +++ b/test/GPU.jl @@ -46,7 +46,7 @@ hist_gpu = CuArray(hist) idx_gpu = CuArray(idx) @time hist_cpu!(hist, δ, idx) -@CuArrays.time hist_gpu!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=512) +@CuArrays.time hist_gpu!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=1024) @@ -63,15 +63,15 @@ function kernel_y!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:Abs end # GPU - apply along the features axis - seems not good -function kernel_y2!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} - i = threadIdx().x + (blockIdx().x - 1) * blockDim().x - j = threadIdx().y + (blockIdx().y - 1) * blockDim().y - @inbounds if i <= size(id, 1) && j <= size(h, 2) - # k = Base._to_linear_index(h, id[i,j], j) - h[id[i,j],j] += x[i,j] - end - return -end +# function kernel_y2!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} +# i = threadIdx().x + (blockIdx().x - 1) * blockDim().x +# j = threadIdx().y + (blockIdx().y - 1) * blockDim().y +# @inbounds if i <= size(id, 1) && j <= size(h, 2) +# # k = Base._to_linear_index(h, id[i,j], j) +# h[id[i,j],j] += x[i,j] +# end +# return +# end function hist_gpu_y!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}; MAX_THREADS=256) where {T<:AbstractFloat} thread_j = min(MAX_THREADS, size(id, 2)) From 341059f736f4dd8f39084a722a9b83e62066125a Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Tue, 12 May 2020 01:57:00 -0400 Subject: [PATCH 13/29] experiments --- test/hist_gpu.jl | 107 +++++++++++++++++++++++++++++++++++++++++++++++ test/loss_gpu.jl | 38 +++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 test/hist_gpu.jl create mode 100644 test/loss_gpu.jl diff --git a/test/hist_gpu.jl b/test/hist_gpu.jl new file mode 100644 index 00000000..c71183da --- /dev/null +++ b/test/hist_gpu.jl @@ -0,0 +1,107 @@ +using CUDAnative +using CuArrays +using StaticArrays +using BenchmarkTools + +function hist_cpu!(hist, δ, idx) + Threads.@threads for j in 1:size(idx,2) + for i in 1:size(idx,1) + @inbounds hist[idx[i], j] += δ[i,j] + end + end + return +end + +# base kernel +function kernel1!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + @inbounds if i <= size(id, 1) && j <= size(h, 2) + k = Base._to_linear_index(h, id[i,j], j) + CUDAnative.atomic_add!(pointer(h, k), x[i,j]) + # @inbounds h[k] += x[i,j] + end + return +end + +# base approach - block built along the cols first, the rows (limit collisions) +function hist_gpu1!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}; MAX_THREADS=256) where {T<:AbstractFloat} + thread_i = min(MAX_THREADS, size(id, 1)) + thread_j = min(MAX_THREADS ÷ thread_i, size(id, 2)) + # thread_j = min(MAX_THREADS, size(id, 2)) + # thread_i = min(MAX_THREADS ÷ thread_j, size(h, 1)) + threads = (thread_i, thread_j) + blocks = ceil.(Int, (size(id, 1), size(id, 2)) ./ threads) + CuArrays.@sync begin + @cuda blocks=blocks threads=threads kernel1!(h, x, id) + end + return h +end + +nbins = 32 +ncol = 100 +items = Int(1e6) +hist = zeros(Float32, nbins, ncol) +δ = rand(Float32, items, ncol) +idx = rand(1:nbins, items, ncol) + +hist_gpu = CuArray(hist) +δ_gpu = CuArray(δ) +idx_gpu = CuArray(idx) + +@CuArrays.time hist_gpu1!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=1024) +@btime hist_cpu!($hist, $δ, $idx) +@btime hist_gpu1!($hist_gpu, $δ_gpu, $idx_gpu, MAX_THREADS=1024) + + +# accumulate in shared memory histograms +function kernel2!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id, nbins) where {T<:AbstractFloat} + tid = threadIdx().x + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + + # shared memory on block of length nbins + # To Do: nbins cannot be passed as argument - dynamic shared memory generate kernel through macro + shared = CUDAnative.@cuStaticSharedMem(T, 32) + fill!(shared, 0) + sync_threads() + + # accumulate in per block histogram + # Why is the atomic add on shared much longer than atomic on h in global mem? + if i <= size(id, 1) && j <= size(id, 2) + # should be the legit way to go - 70ms + # @inbounds CUDAnative.atomic_add!(pointer(shared, id[i,j]), x[i,j]) + # unsafe way for test + # @inbounds shared[id[i,j]] = x[i,j] + # best performance so far - weird! + # @inbounds h[id[i,j],j] += x[i,j] + # atomic add on global hist + @inbounds k = id[i,j] + 32 * (j-1) + @inbounds CUDAnative.atomic_add!(pointer(h, k), x[i,j]) + end + sync_threads() + + # if blockIdx().x == 1 + # if tid <= nbins + # CUDAnative.atomic_add!(pointer(h,tid), shared[tid]) + # end + # end + return +end + +# shared memory - +function hist_gpu2!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}, nbins; MAX_THREADS=256) where {T<:AbstractFloat} + # thread_i = min(MAX_THREADS, size(id, 1)) + # thread_j = min(MAX_THREADS ÷ thread_i, size(id, 2)) + thread_j = min(MAX_THREADS, size(id, 2)) + thread_i = min(MAX_THREADS ÷ thread_j, size(id, 1)) + threads = (thread_i, thread_j) + blocks = ceil.(Int, (size(id, 1), size(id, 2)) ./ threads) + CuArrays.@sync begin + @cuda blocks=blocks threads=threads kernel2!(h, x, id, nbins) + end + return h +end + +@CuArrays.time hist_gpu2!(hist_gpu, δ_gpu, idx_gpu, 32, MAX_THREADS=1024) +@btime hist_gpu2!($hist_gpu, $δ_gpu, $idx_gpu, 32, MAX_THREADS=512) diff --git a/test/loss_gpu.jl b/test/loss_gpu.jl new file mode 100644 index 00000000..37cacad8 --- /dev/null +++ b/test/loss_gpu.jl @@ -0,0 +1,38 @@ +using CUDAnative +using CuArrays +using StaticArrays +using BenchmarkTools + +N = Int(1e6) +pred = rand(SVector{1, Float32}, N) +target = rand(Float32, N) +δ = zeros(SVector{1, Float32}, N) +δ² = zeros(SVector{1, Float32}, N) + +pred_g = CuArray(rand(Float32, N)) +target_g = CuArray(rand(Float32, N)) +δ_g = CuArray(zeros(Float32, N)) +δ²_g = CuArray(zeros(Float32, N)) + +pred = Array(pred_g) +target = Array(target_g) +δ = Array(δ_g) +δ² = Array(δ²_g) + +# linear +function update_grads!(pred::Vector{SVector{L,T}}, target::AbstractVector{T}, δ::Vector{SVector{L,T}}, δ²::Vector{SVector{L,T}}) where {T <: AbstractFloat, L} + @inbounds for i in eachindex(δ) + δ[i] = SVector(2 * (pred[i][1] - target[i])) + δ²[i] = SVector(2) + end +end + +# linear +function update_grads_gpu!(pred::AbstractVector{T}, target::AbstractVector{T}, δ::AbstractVector{T}, δ²::AbstractVector{T}, 𝑤::AbstractVector{T}) where {T <: AbstractFloat} + @. δ = 2f0 * (pred - target) * 𝑤 + @. δ² = 2f0 * 𝑤 + return +end + +@time update_grads!(pred, target, δ, δ²) +CuArrays.@time update_grads_gpu!(pred_g, target_g, δ_g, δ²_g) From 459d82a0040f45a2abf0de36b9d513758e66b995 Mon Sep 17 00:00:00 2001 From: "jeremie.db" Date: Wed, 13 May 2020 00:37:28 -0400 Subject: [PATCH 14/29] fixes --- test/hist_gpu.jl | 48 ++++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/test/hist_gpu.jl b/test/hist_gpu.jl index c71183da..cefee42d 100644 --- a/test/hist_gpu.jl +++ b/test/hist_gpu.jl @@ -6,7 +6,7 @@ using BenchmarkTools function hist_cpu!(hist, δ, idx) Threads.@threads for j in 1:size(idx,2) for i in 1:size(idx,1) - @inbounds hist[idx[i], j] += δ[i,j] + @inbounds hist[idx[i,j], j] += δ[i,j] end end return @@ -16,31 +16,30 @@ end function kernel1!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} i = threadIdx().x + (blockIdx().x - 1) * blockDim().x j = threadIdx().y + (blockIdx().y - 1) * blockDim().y - @inbounds if i <= size(id, 1) && j <= size(h, 2) - k = Base._to_linear_index(h, id[i,j], j) - CUDAnative.atomic_add!(pointer(h, k), x[i,j]) - # @inbounds h[k] += x[i,j] + if i <= size(id, 1) && j <= size(id, 2) + @inbounds k = Base._to_linear_index(h, id[i,j], j) + @inbounds CUDAnative.atomic_add!(pointer(h, k), x[i,j]) end return end # base approach - block built along the cols first, the rows (limit collisions) function hist_gpu1!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}; MAX_THREADS=256) where {T<:AbstractFloat} - thread_i = min(MAX_THREADS, size(id, 1)) - thread_j = min(MAX_THREADS ÷ thread_i, size(id, 2)) - # thread_j = min(MAX_THREADS, size(id, 2)) - # thread_i = min(MAX_THREADS ÷ thread_j, size(h, 1)) + # thread_i = min(MAX_THREADS, size(id, 1)) + # thread_j = min(MAX_THREADS ÷ thread_i, size(id, 2)) + thread_j = min(MAX_THREADS, size(id, 2)) + thread_i = min(MAX_THREADS ÷ thread_j, size(id, 1)) threads = (thread_i, thread_j) blocks = ceil.(Int, (size(id, 1), size(id, 2)) ./ threads) CuArrays.@sync begin @cuda blocks=blocks threads=threads kernel1!(h, x, id) end - return h + return end nbins = 32 ncol = 100 -items = Int(1e6) +items = Int(2^20) hist = zeros(Float32, nbins, ncol) δ = rand(Float32, items, ncol) idx = rand(1:nbins, items, ncol) @@ -49,7 +48,11 @@ hist_gpu = CuArray(hist) δ_gpu = CuArray(δ) idx_gpu = CuArray(idx) +hist .- Array(hist_gpu) +sum(hist) - sum(Array(hist_gpu)) + @CuArrays.time hist_gpu1!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=1024) +@time hist_cpu!(hist, δ, idx) @btime hist_cpu!($hist, $δ, $idx) @btime hist_gpu1!($hist_gpu, $δ_gpu, $idx_gpu, MAX_THREADS=1024) @@ -62,24 +65,27 @@ function kernel2!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id, nbins) where { # shared memory on block of length nbins # To Do: nbins cannot be passed as argument - dynamic shared memory generate kernel through macro - shared = CUDAnative.@cuStaticSharedMem(T, 32) - fill!(shared, 0) - sync_threads() + # shared = CUDAnative.@cuStaticSharedMem(T, 32) + # fill!(shared, 0) + # sync_threads() # accumulate in per block histogram # Why is the atomic add on shared much longer than atomic on h in global mem? if i <= size(id, 1) && j <= size(id, 2) # should be the legit way to go - 70ms # @inbounds CUDAnative.atomic_add!(pointer(shared, id[i,j]), x[i,j]) - # unsafe way for test + + # unsafe (collisions) on shared mem: 3.0ms # @inbounds shared[id[i,j]] = x[i,j] - # best performance so far - weird! + + # unsafe (collisions) add on global memory - 3.6ms # @inbounds h[id[i,j],j] += x[i,j] - # atomic add on global hist - @inbounds k = id[i,j] + 32 * (j-1) + + # atomic add on global hist - 3.2ms + @inbounds k = id[i,j] + nbins * (j-1) @inbounds CUDAnative.atomic_add!(pointer(h, k), x[i,j]) end - sync_threads() + # sync_threads() # if blockIdx().x == 1 # if tid <= nbins @@ -103,5 +109,7 @@ function hist_gpu2!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}, nbins; MA return h end +hist @CuArrays.time hist_gpu2!(hist_gpu, δ_gpu, idx_gpu, 32, MAX_THREADS=1024) -@btime hist_gpu2!($hist_gpu, $δ_gpu, $idx_gpu, 32, MAX_THREADS=512) +@btime hist_gpu2!($hist_gpu, $δ_gpu, $idx_gpu, 32, MAX_THREADS=1024) +@device_code_warntype hist_gpu2!(hist_gpu, δ_gpu, idx_gpu, 32, MAX_THREADS=1024) From 415f397954567b50a0b5eb1ab59b3cffc89ce47d Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Tue, 16 Jun 2020 23:38:45 -0400 Subject: [PATCH 15/29] up --- regression_sinus.png | Bin 36608 -> 38424 bytes src/find_split_gpu.jl | 47 +++-------- test/hist_gpu.jl | 181 ++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 189 insertions(+), 39 deletions(-) diff --git a/regression_sinus.png b/regression_sinus.png index bdf4875e87263cec19f804aaae7fff3b0ffaeeaa..0eff4b20bcf94b15fbd447c09840b443810c05fd 100644 GIT binary patch literal 38424 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 L_nB>_O(6H*U@)#r literal 36608 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

Go8X0*&$}|pHZongFS&nW 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

>ROfyxU^4laH`{QlzeD8sEKH5TUg5CNP zbctC~&8y4e(gGf&1W^}q9N;=b6RxVmb&>4Pw_G7WZ+#UN~k_=-#f`R9q{>Kv&v*Sonj z{8Gn{lLlspDN{fp@wPtH=y-_(JHdA4)2>CfM04nyA z!@~<8Ct3^ts=bo3avHaJ zC?CShc;;(0I%X9WcSns*Wol|_a4_^lD;uoZOy-g9U*gnEy00{POWDGhVB2msf)$uHI|?ZH=Qkas)MBzEHf;ty(WodO5bhgH*rG zM~Q}p(V*L*eyHTP2rJrKX94n|(04w}TeO-@LmY{_?{RgmI|x~}J{a8~85EF6JV^Wp z=NHy8D7tNV?i`97f<@gw34X5?B;lHDD7v2I9yNbM;oDBWA+)RfMJ?O?1av7l1F_keeLHT(NcavP(NIWbEIer~33pQpi@uC-p7X@{HwgrjZ@+Z6TT+A$do6$Sb%u_k>)jOhJi0<_WG)E0yi+69Ke+7q? zLXsKJ$&xuTkle~W>-NGdkV-*8_i?#ikX1vplNOEZ&LS5NotdO`2Wgw>uW!3VBH=H_ zv;0sBghNltV&AeO*6i`?g+Nm==ei17?D#yo28xx>|1%$Epndv#Yic*CFBGpyoOTtJ zxce>O=5z5%zP_5;OWvnN#e7B$ProOZvU)qZOtWO zU^W*DdUYMi8pByx+-Cl>v2tIs;!(_@$xrPQYfjn1LVmUrB8Jv?G-qCftP(c_^)bV| zXKRHi3V~TE45SJ^^ZG!gOB1?oaFV4oE2ge~u(7Ab9E;uCK!2D9X5n71C~a(d-Q9VA zD-#)tpRmk;dPeb*v!SgPAS&e5r z5UYxZ)#r%ekq2mMAdSVu)L2{$n|gZ&mI$fOlsp)FZ;fAnjw^ogh8&AjncZ*tvZ%tx|=p9=_Fz!rZ=l_l)9ytD%y6Yocvmv*bly`1kI%s{j05U(KJjXU(mCoMg1 zh|lK1W+ANTBQ)r7Fw#!byhrhIN}CFM+Lt|*Afl&u2 z@3l(ZW2cb%nEbtg#Cfe=9RzJEr!5f#|A~5rZ5+%kB8GO8qI&&vm6syRw||l?vfX+5 zn!#j432!s~>?~FI5=E{^{!Xe*1l|tz3I4PmbneBO7bqG5q99U~ar7CHyWRCA?we!I zW~O@YtGa4i>lH=Q&xQ&qrr9*jRogS2+e;+G{2YutH0SHjJzEX5+S^6t65Z`&$VmECq{9a znjZM>1+Z%{1bjXf0XwQbaK1fW3E>O~RIK5|BK*)bohAX7hF1~)Q;)`EJB${vZ|*1= zEwIzdg2E#8)$HXq|BzD9wm2eIPRqeGDEi(roeyS5&v #m|8A@UAb*g#6T_&=!^ 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 literal 0 HcmV?d00001 diff --git a/figures/regression_gaussian_v1.png b/figures/regression_gaussian_v1.png new file mode 100644 index 0000000000000000000000000000000000000000..7e4431b61453feee86fceb0ecee519a0c205e04a GIT binary patch literal 29197 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 literal 0 HcmV?d00001 diff --git a/gaussian_likelihood.png b/gaussian_likelihood.png deleted file mode 100644 index 3f9032df79397a7f6e1ee6e0ceeef1ab2b53f025..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117727 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 VPq?P2@-+f}X{qa}<)~Wt{4YT|4>te+ diff --git a/gaussian_sinus.png b/gaussian_sinus.png deleted file mode 100644 index 7b8b603c8cee86bf3cac99d4db131412ec54486b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44388 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 diff --git a/regression_sinus.png b/regression_sinus.png deleted file mode 100644 index 0eff4b20bcf94b15fbd447c09840b443810c05fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38424 zcmZ^KbzD?Wxc4fxlr#uPgMf5P!_wU?DWQZQA>B(zN|&@WNOyNji?kp}clSH~?!AA$ z;)h+>Z2Y8~9-w6xtG+|HX#3Y1)-*?8pufR6@ z_g=-oAnZW!iUkQX{NGp!1d(HsY@Or%x9H zF*GGwB|mH4Pqlhpsz+f_i0sW(7c@6}ZvIF=Tx`s(bN}yh{uHvpkB^T(eE2}Xr0sRK zg|n+}V)Fa`_OjflwdvhNj%jzWu-6qfr0xD}hr0S?UnJ>!qI6}QTI-pmW>?p}UpNqCEb=$?9}FodGRH)2nfdwWIy?Po2d!s{ z?dGcTY-YcY6z=WqO-@dN@2Zod0|O49K53t6%d=eRQN?CvmQQWl+Sw`D$)ZwnaZN2R zFLyn4?c72k5_87))qXjgH8?oP$jCUF##iuQ_p?;b*49>0QStufob1I5h*<6fx7|GV z%a?tcg#S$?vx!A9Tti)*nP&mA)$7uZp^lN zu5{$%!)-KQg6rWjqqWO>WKkx`LK3PBjcAy*wzjzVlkYe=|E4oGBOx#_FfT8!fg%po zGzg7AHg;rWJVq!Ffs3mWtzOJrnf~=8)4Z^>2 z=;-M1^Mm|tAL_G*Dt7z5eMK~n@PS0CzpLvhUt~_8vGx|jZK>i*xK^>|$B!RBfByV_ zrkDWI)7SU&yJ53(y1?b(%GmI5b!BDti~b1WZp_{Fb@(rtP&GvPj;BwbGH_%)c6suf z7DE;GF^EJ3q;O8(d7AeOVhoUeZg}EBfKP^$+hxMORrrv1ak0Muhr?@XY9b;cz?13e zX?m56tLy6+T7L6^FG%Qw>l+(OjZXAJLSDZrOf!9M-ba$~Xn%hr7rXwm%;5Coq{(GB zzb?oEk;)r)7E6CW*{tJ^^!any>ueQ%&m#Kgo3iOe{tKh8$v zpS{+Sz`+zNYOS=+WVnQ-(Q5J$gk|2c4bw9{5OY~>IX8iG`A+dcqhg%SNHh;i$QnPr z>Y|Dhu{SdzCSN5~EcTmpuK34q9k6$lFngmLy^q32bwTP$x@;cbb*osP6g=%$*XR!N zXY6|u^rtvI6s_vcfz1DuL084^ww$CY1h-5Mp9q~w;L0LMc{@c!yqn1l_DVNVtvEfh zzA@VKM;dj#4EB|ESPcyURT=llZ|W*4QUU(&F^Zxsm<7y_rB0T391z7c-bf3US*%^< z#)&HRO<^KOQ~w-?yoTk^ozFwJgDRY9wnteH^mf7(*O!L8wx_DZ>%&jxhP{390_y<4i>t(SjjM?>j zE_DU7sop@!?uTKFMpUIQ*#9n%X(#KXoLF0Su z>%s$Q!?#@o9z;`PVN9eW6|^h2sl@a-yoK4m%#zMQB~~rgqpfT^wDj~Lmly6Dk}Vq9 zD?yipBdW~qpouHXdFiE~F~jqWp^Wh!Q=c`JlIan}$9Z7Kuh4b&du+JY4j4oT{B>I7 zqV|sU2LuL(hu_Zs!<>oRBUcJnn?XBt>H#(aDQZQi@beR3+9S=xy>9@-33q74XoIKFQV-pX7? zhpIP{MUzOaUat6xI{fxiF6hRR|N0|cP(y-Pe)SBsDEayfwHBo)yx)F+Db_<9cEZTX zB(@bvf$gvpEvnqyM0l?rf2CEnGhLZW50R9Sv8mOcUeFHM+Ij~Wx2}DBAT_Kl7KG5! z(KR+Vue7Gcr|6AXo$nl-F}AO3@QHw?sSjnuf<+r{89cFAFZ0i`BH+nd>xYE~l$Rg& zQ}`}6yV`4zn*IDL;IebJJ+->Jn$;I>IER*x!$6~y%Zx3U0>3-u?W~+X&{fJ^tka<4 zfTV{Kj6F1mWC@-5%e_qbQI)`so!oQ|62Pf>eJ%yCMJ z`v_$VR>&^(B;hN3?Q#?(`!_|uB-c8Xav3nl1e~YxmGbMl7U#g3wENr_IxWh)lZL&E zRVI=ob(>L;MJmGkYeKwyz!Y=4frcQCt&#u2#UYvLLpG|Z%hJRJ26+p*p9$IJL91nO z?3p5ba^nX7ka0bMRf?R(jFxk<3l{p65QblYP1x-PSA7MWVVvv4;R)8#!8;i=Ae$iN zvKN{jgrkNGC#12h;cXaAOKcfQN5Ay)Mr~sKm5uO3tfx1RT`P{9XGl|{>MGZAne(Pw z@~jlun$|xE8;KdtU_!+#{TUCYU8~p={Uuiw<3wa#kB92)sy8l;Cmf2|ibvwn-(Rrx zO(weR*|W*zvYplgwH*iAOcJ{lA9TM4Prjf}pm2u=2UjDNc9IYoOT8F=4vDqaxCK_j z$FDL4>7IfQDSQQYtB4S%jC%crkNwF>uFetTJ2s`8gCwuRILGC7 zDoF625hH<)ifL?YY;SK5zW=Kvcu0u-VuM;#+fgV2tQD!0^fsToSd*5XXhd~UL?bP)2fNmwRuQNRpq5_DB9a~DfHeNpFt)*6Jl zR?FFy=Hlp?Me^C6{*~+vLx;g~3UgH`sA*|;9`0vrHV0+s7qEG$8B@df=Iqt0HQcd$ zyF}NFB*z;mZ{D@n5Mft1D@bZiJMA<$Zx05cM;AJYigt}fCv(f~HBx;dj=c%~`|9KF zUg7jXRj)Uk;dj0oz5|6RhrB8U)n#PhFAX{#$81fvdvq7!uoen;I`>}{t+m!HxsRg* zqerOc*-_GxG?}WI(K=pl-kZ|R@x6O-X6>7XBO(T=*+MsJqj)x~H^PxOl}{EI4@KtC8c>31mgRS9i*%7O6E+2*^V{Cq<;GT#6e>Oa z1%3SmQ4}iEWJ_Znj#A~IyjL5i@t}o`rTM&)3KYV17h>EaSCpwWH;aTn%+U(Dd#gV> zq!nwlkf790V4Ut;FVKFdDXoUSjd{zm%E@qG>|5Bo$B_v?c^wpCJMifx6f8{D>%@1@qquHl5f z_2a?sgrQhiT?kLPGe=)Aw{VJK(PJNSDx{Gb>-z=DJRiN~OsvW>QaYbjQyg)OP#ZWyavFAD ze?Nklwl?9^$CWm3H8r(-&d)utfi8@oaX3XIr%?dRr@_u+ch>myVtH>vO4YZ-=dQW= z)8s7`jT!|Wg%0H__U@c%@zEDO1^s8p?Rxb$c3I26RIT4CZs1L-9V>W5&W5X=Ym!$5 zRUmEz;to2#MJ$Y8Q!b<20D=-VYG^0MEpEp znTSa~t-uY=W%*+E9T@b0o#PULGbe2wy`=;f%qA2r>2G?msj4cT<9C)Cc5Z^|H4l;B zL!G7K+&}BEC1^1xbnw9N<>A;qmrJfp+NDq^^xbkxV|4Ub01`S0udVDx6F^+=YUlG5 zl5VcAd90@yxVX3k1a8vo+w_{88O5;=4h{g{hzt*Ra(1>|X}dpce{A!<{Y0$2ihACw zYEPd1US~HcCUIN@xn-(1S)+wfH~XbhYK{3IZvLML;(j7lAstoKbvmzUR9yRV+p+f-w2Tp|3M>9rHMPNXj(70K@xaBuGU=;MhAuj>B(et6M>C2x*{ zP(;d$x)l0Nh6*>$=+O-(jJD_wXEU~pdg0#jx~RF4|Nh>!GLj7!7uS0BdwN2Gg}uFs z;4@;*Z!Wt(%Z=MboVUio^>LGo4#v>~gpNl}z6`Db1&bU^9i*efAEC9i_5SW|%g^R# zDZk5(rkI#mtH=3=#fFJ*a(M2aiUp#_JvFlZGT2Kec_r(|4 zZ`7rwk$1^tVzVZ^j#3Pg4F((46?GNG#QaqJur{h?#IUlP*?lFAc3U3ReNRtMQ#c@E z%F5!fE>ehYrCCs`@JJ>_2dOHp4^{VgAe73-I2OYMS%%N@VsDOG;Yk*~VZOtsI%1KQ zl#i2+&NVUX?H0p{B$3Dvk(;etopK{78JRd*ezP9vjx``(fci~NO@YPcaInaaf)X+^ zqR7X`2XSzAjxP%+&b39Ff)-B86kds8@5Z+JXhkpWJ#+iyKsmSauZ6 zxg!&AN_+Fnc_O1o`Jx=%kA8~-HU=g;mB)r~jFO+_y@$t5C=R02%wAJ&8+?W3j^=** z?L?5&o4`CXZF>RYK6av|mvWO2STdIF@5knH-8FD-^v&*#V3{HetKxJ2~J{Y*3ZJ*i(+!#v6o;3?4Tl(!i$UBH>5SDZG62&kxNuNNy(mxTp1?K!lNbEmD&$WB4CKnl z@F+3`IBi?@Z4I&u8(ici7vu$)slEZFL(H$h-iilz<9-nC7`40-a6Oo_gB1dR4`|4D zcXwB7=2lki9_KrNAr}=D0sbCe-_p_&f<>Xe2}lJI>zmh3e-#}aIX6y#V)3>=3g{2) zTwJGf)mHBA?$PAJoIU^A6ng?T$wS+ho1h;a<#N_L>o=RoV}p!Y^_h_o5i9kF+Dqm4 z#a;_#!V?+RP`lRr+WQxtMTuLjZ0;O|Vc&vf{tW@HrCwdeL!_Gnjw=;{TgiM&JCaA( z7Vnl+k0`(fBTCRwJn%sbjj(t64Hu&BCyA}W`6@Jtf!%LVvVYT&$+`Au%5zZNjm|IC zr^~`Tnjsr0{gLvLl$d*h@#fF}1CTj>K^4zA;i|1kuh$GP@(yJ_*+)iLqxAmie-G(d zACxH~$u4J`@UgfQ2q(>g)6LjxaT&a$T7QsE-To9wfBE*>>NEDC3Y+?jrFDh8BVBBc zKk5Wbm$w>?S{JI;0n^1m3L1YMq;XekmW3J2t-tL41-jqrofw_VyNoVG{%gxOGWC8* zk--r^P|c%YoJA8suKnqu#zq;Ax(~Mo8R^|TI-QRcJZwEeXL48XQ_ji1c3pw}-&wzW zV}^;7xBQWzk}AKKbU!-or6b>SYn;h|Z4^UZ#qSQUI$PPY^VI?!*41u%z#z7>F2#{E_ot@8wS7ruU}n`R#G+2#+;#q}0lfnW@ZgTr;$K-#VjM zr#RXlj?R>@73uTn3Rz0ZNa^$7KmMIUFUL;Y+RH}%`w|W+33OASseQruIW`vEEEl9) zprE9br?d4817oq?K65&`62N=-6g_-dFZM>W=PkB8&c^6KWC+3C`EIFMZTktHAEdqg zA?xYRz6wF~i;Yk6)GcFr?5l9SG=sXNs#zsS+_RwHka z4h?8Tr8!(HxJ>jApVv61M z$L*@KL$#*KySHL{^5jvlJ+&$9s#HF1U{Jz*ddtd2G&eD~ntpE|)pHnPGpZ@G6FcA< zIIeY|!uBBiZBpf}tU;(-B=#mCeEBNz`EvF}UHG6^tUL zgFfD!jsblzl1#8pt3(?JJj@IXvMMU}li%ckxYHL!c6+^UFJNG9xW5eQ~(b zu8_p~@bDlJ^31U2-2}i0&mf`?SGk#)E8yCYF-dB`0egCSfPneU^YQ?XUU_e^k*ifU z4cm=0->k46Gp>rEEmXuF4of?CU_(Mies;ZGAYfBmY4&T{;#y{JJlFnKJ6n{P3tt;?837TkF*EWGsp+Lif&G*tc!NZRmSaY z19N;zbbCx%)~C0JibUWw(DyPjGC-?)x7hH}$HxcIS*sskQ{v;DPu2$kw}QNO_$>x7 zq;Z?qT!~J(`{`c*(wKO766TXpAyrjXFUZKMtE-DHFMf9h3cBn#Z%@*BdftNJqMH9) zZ~7``;FmxYYO6QpVISYw0=#*Na!S<3rr>IG>`7MieX`OY%PBQ}eZhI|$|sP&mT-nc zi!&uW@dF8V0*^9GG&HmO7cEZ;F3DZ4SFO(4*`_q==-FnrWq%6^|K&AmfePChZQ#Xl z#~4T~-YFa&{#f+=2+mqvqZ8tnSL<>u;1Us+XxHfIalhE+-7KH*Dw32B8De9zOD^p3 zrqOX@rbGt_x$!7~{f*uVFEBGRw_UBFmuc_*`7;GnzB;>wlRo!@#l~8j*;meZ$p1lx zWhl^8UO)z%(KN)xf8@)jQqdlHtV{hSd?>7INwLeYBxROs`%JJ;{N zJvbaNR_gZ9Zxl#*m&)q!hWGeLr}iYm0AK<2ean|#DV5vj&du0(<@fI#@d?l{AYy!x zKmg7VaIqeWXCx;lpDIwX!c5Fgm2Pcm0YYog2Z9eIEWy+HYCpg4?oj29%6#IAX$hOZ zw;J2|UMA9UJXIKj9&%-nw@_ z+h~A3Y3ueQOa06xi>S@il_>mfoZy|i;4qCg_C!olNl_dSgarv8zQ3t0 zD6rDh)CBrAIy!n9pS_61P(0Ah!T4tIJM|3>SuZuY&`3vQrAlv(Wvb|4W04DiTj@w) zA%mb`a}t}ecA@H%WxmJ^QQtOL5ZZ7On@kNFUnB{9ueBnt?diBM*Fw?R#a;I0V#TMt z&73Egknv2B(ED(Y=5z+fl@`?7JExt+XOy<5mQ-9LDPxZh&C4DBXYCJv`ZikJyU)ZL zx10qge-c8N?QBcQ$Z&jV6wuKjzg+gZj(zhXV$#x0)z#<_#E8S&DOWNv&8D6OsrT3G zy!B6Wm$dr&<228uFakJy|JA|`y5;s{9ys&upJfYK;(@G2ExLK~3HEK*(gjodOU?Cw z(*ddgtb#hARoB%a`+*0r%AEnx@wz@SH8uUW`1A5CK)(PuLknp6bJgKD7N8w(?(g4k zBpLHs|EDgCi;HVcmB=yN^T2wrP>QPh$->NJiNdea;yr&X9QS#%RH+k-+RdZgA{h%R z&huDs%nD^&1zkNIRg~A?Sj|pn@7xV%`|X`qfvAP)q^^O5K|;%;+3JsQySFI!$n;Q( z{K#GUkgC6^u<}}Eh4+2N^tYh#k|Bm`Y(t)2ClTNvn0(;r`ug=N=w2L#seJZE-`_MQ zCnpyc7VgZHxb94UzEP5kjR+41I%!RPJrK#S0n^LP%?0Hc8ygGMe{EIO@f<01`DJGT zLq)}ra3VI5`!fw|He)QT=+e?sP`~tabTj3~kJV!$cw_X%KcU0g6xr(Ox}^`WA~K^WcvVM7{nX(1_G{c-ayb5fObx=QV3M{}j>d^>j4!Wd< zh;R#4a4qMGY&^%wsRrE&orv{?s80(3cYpe$b$D2WqAQ+DFJv1{I=jTEA&22xx(5BH zxANx_@jM(Htyc#D8dB1cBv+Gio>%P8fB(EW50*58joWA9!U8CHxvgvLJ0KG3a&E^M z&@Bq?L5J=U4K7LexDX~UDxD5A5*4T`4AgLSdPt$>7#E_Esiofe*|q`1Z1Nk8W~9Sq z_B%?-qa)ZdRB!B+AP>*LFcbJcy+FG03%EJ#9s7}_32kcCff*u|*&qLS8~d`j_&l9@ zoQfwB6Wb6G4k#?E2>6ly`uNL*oc!Gm?j_^f#Ao(2Ewo2xsQ++VRxx(sgtBeX+jY0i zGOhyAaK)fRL^7;PL^{ghA3+L40lWger+ZAs~4v z(Ohcic`jj4I81vG70AR|{yQ@ByfiFTfX`N}vO-b(66b^MB<)>EIq(&HZE%v#7M&?g z0PC7=XJtL5R~9Org%s@*uZe7E3E-euui7Q6ve%QC0$hJAG z$b4FVTKtQWwWbQ^EDfFTVAd8XZ-7f1X-NR8M3w;d zwyiCN;HmSB;-Zc6U#_R^)q3qc*{Z1tMaKYo22s?23aOfo0W};EBil zo*qPmo`YXh@$XVL0=u99j7!MuEiUKFyhwO3$;njhyYoM*`{WRWy-C6P zmk~aVYXiK}jiCfVhu;vn*!S<>C$SoOoUEg6u+YmhlV7Qpq{SG40Xbz8$8_21k3xMJgO(ca$Q?({{P_<1(FD)6*TOGJ|_O_$Csv$b>67Q+lp zr%xGf#&#)LE9u^(bufD90gs#b@!)T zPbdzp+{5XZC@@vG7wQjXD7?8pEWVDV1$OTe@XVvg1c4y7FgnV@&aPUnt_J|2f)0|jDJ{{4QtLuH|T*=R5ucca~OBbfXL`I;pPGO}_i z_h%n%AhnBLZdXf{?6=z+@3(me5#pJqpjo_iXYnA-A7#;Rm@YiFaCFhf*O--WG+@NwtebvaqV!cf{$$P8d zlTRDIwhuH@LHagl*Qc9cF~~%{xLysRP|g%t0vHkyeb=pVDq-RKI294STI&R$IhD6R z2moUj%xDlC-f_D@x;s-+51KO22qD0AQczI%7a;(ufI%c5FGBT>Htkf^#rJ?DboK){oZuwcblVz(;gDc-7H4xL*qZIEtCv8c)_{&UW{wC)~ zdSZzVf|$HE8pQc*Zvan-}{mZ`Be*_((Ij0oTYmJAykIkHQ5}(5S*l}mOgCzp_x<|i%TeWQKZVZSuOCBE z1l?)3mzfzt#5g#nm=MV6%>@89uD-69Y5#@@JpRHYO+MeNxpIS4R8*}k%WiiZ2~O(j z(ylaobY7QTF0q3^{9I~J*Lr^{D+l0Mb4OF;Eiu}@b})Gkc~?vR@UWju-k|r)J3&9u zmr5(HGL&^z2w!!lIg~Dm7!f{O#U`#tKA{4`|}BW%w+r!U44B3oJszChpX1* z%|M?!Sr8vUi4r`R$D7^V>&&Vj4>1Xg>I2K{_NZtfodmU_$7Yoja9W}%qk_RWN7oFcZp2#%t^ zqL2+(mQHBSQe$nvvObA^utoq zOsU>!2!+qqT=gdKnSD>z<E{?hkfFEA8umq)%dF-LDp<6HSt5rOdz=O=;nXp(h2IMpt5~4>ka#tKT^x> z1NRv=CE8Ow!gxexcZ3%`CrI>0G{i`ECAUOW(aZf*|9gGZn$y>HI4&5VE<36paMa+L5Ccg%R&Y?^vV;9*B~g#IoD^w*R~DBNAk}py}|S z?Q7SI9k1ODLw?2!Y`vP)2_ZhD$KTzUN+8=|c}Gs-5h9S0@yhk13ZF9#rg-P);4>juwhO6wzwKYy zCPt@S8g7*%_>EbifUfknh8z@~bzy2bohb5;p9SogK1BG#-a+&Blw`0HV|qqwZ33T6 zu9OdT2Hb|;*zRh0%eh!k{QigTRo0H7oLL>Xmuw2TWTw4anObt)uA;>p#f zIL}oMiy9KrVqLbFY?z>?o`joxCH7I*h)H$%C>%WqIv@Z5NpW%A&Oo~H1ZeS}A!X75 z(IC#J9@;6!VgEbCIh6DJhO(S(;c)J5&Up2>hrW-|q9+1kU zr6a#kh9;L81U^|_Y*%TPMLS@h%RNa}(MTax$hW+`#VabB6V&#V>VuhndchRRKYggj z1Eawp<_T#|3~QW$HZl#XMu9-r3IH8enckMTC15~G#UC&5uXo}}KIa+!_~V!)ZG0$0 zHuy=UwWWCK7|N240U1tYkx+!v^t8C2enUouLbGn5cw^~lT(-adyzLLJx4FFfRoUMk zrS^D2ZjXn%^_*EQZGHL-jew9n8VNlM7KC(rX#@E^80V}V7W?zh-!irxLnsl45B5Mx z7EB9cc3-n=c(?@I8}sX6EJH(ZkH5I2oEM?&<~*j^zhiSO+phM-+ROKJ}K;i zpm}02LwIUk~4v=1(oVTAsel*_tZdbA{uigFJk6BB3Qy!x(u7?v~q}TU?eQace zE88duH6z9k6n^@WLm>H@okg~goH&o@9{d@CzE&>Kz^X-JPeHds z6Io5@A;$*`7EZz+#tU?8RC7!e*&Tw`n$llS2pbp}<3mMYVUzPRy20=-+&7fA@sr`^ zxODKw%YhcRog=iWJ>FZJSlUfKyQb-7k?Dmrk${#Kx3MA`CVo8z9A_OeD?(E!H#Qs{BuO+G6f;loo6uVT)a z6?9n06~s) z{4weUe=KPl^(k~>K^?nYV&k0V#OPI1YF&&Mo}-BZ#fj3u^;@0+-2tZGdMhU#d@H48 z20Af`6xrzl@;94xRoIBxCKTDwPRQwV1Gn&swnFKKxarvu%4YuAFBe+NBCxMT$;k$h z<3fycO1U6F;Ns#E85;W9)tm&J7D)zHa2J!W!+r(`17Hx-?y9P)K&5nV<#|78KAOry zD|fLwYY!A%Y8(>ZiU{>yxk;<@<`Uk8Bp+VqqnzwOqWhJe1EcV)tO`HU86dgM^1aIn z4bp|;#MIv+vW4bK_X?LU7}CO9L^fQW?_!28%P`Qw(J-i)sJ2@Fu6t*eWDga5927DN%)+V33aYu?Mr$-NoNpAQ~_wR0&siBGDiTV&?Q1ol7rRIy0*KlSbT8}J)+NX(_xZEd7bYD=9`wg1Uv>?#G_ zKrEet&%?EqprD|ZP9lepQ>u_>^b7tfnP~Ffm(y=wgCtuyV9Ow1pnBK)od^X51+Zx0 zjQANXRv=lwc3g+L_#ChGg1}9ckhz6L0-NyzfE&!N>B_SJ0RtXdxoBr=3v^(|xK2O_ zgVc2#Zs1e{vI3&Wur6yU;piN!<-)G^8*7O_ePPc(r%B`B?9gb|g|j|~9P4hQm@~h) zcKvLmu#TB1Ui$i^?(Xy_R7#z1ow!)1W5&njKZ~vTeGM?meDBYRT-t#92grVfknMa; z5#R(Zp2p|fQ&u2F#4ICq10{GtNmJzeY{|(KqZHld+pK{b$d0CQO$V}!Wb8jJVeBivg!@(d<83=gU+)O<@m&H|I(-dpTx4WqW9fqZVXDR0 z)X&sR6ND4hInhO3{k}F}atil!&5!rJv1cChyggr-E=}3{mIB=7p4Yk36MFaUpB4$O zewIF`qIo43goK136PZI>Tx=xIvUdW4aIitbf8sk(>A+SDUoK7s1y$gK9VbDt!n(n0|H*Pqjg8yqa>aofNPOh$-`>Wgzm#A|U zba;JaJ?=$sZR*vM#mBf*NvT!^c@h$W zJlF0gtqkp1p6_Yd*&X^Kh(iM{8U(-ip$%u<30*H>Z|<8aeR{SfiVdOMB%xJ7@`J+> zAxFigD2*Jdw>Y|ZD8mi@yUc~Yl0cpzeG z9Ogu2to-fqcEA1)q$ecM?}vZ)xqd^5)mT}X{`PsW85P)qf!G>7e)Lh7n)U2@EUq2t zDa_S=^YUw5Mnq5^Iz59~+VqIM+f*TSD=yvBH;@TNcW-#u+gK48AvMCLZjxk^FK7AO z_l&9DVH$NC*=r+sL~m8zL)U6Wlv`bkvigX$qB#lCXUiLFxpcu0)@qG9zs|<-V|76y1Ofcl=?_>(sRK8mO z-7~VnxF2(KHGfjxPpSV|1N&mA_(C}hut`_meBFa&`P`#vN*5a~(NV3A0woPhocrlZ zdM+*sNFs}Y@@>Isnd-8bqK=m!(ei^@wzGvnz`IwhNY8~CN=l?VI!LlfGQUtOxC zEKc4vmK0xF+VA|!knYh`mEoMq+xbj^`KMmba zp>(68JmY~Wem3we5Uk}tg%bGU4Q?|lt|WN$CR}q)_I3mqewxQFLs`wnoUoRtG30gm z932Wpmc2O?U6$2knQVAL9l!t&e*6T}OPaZ8v*}(OyAd0HA9?re>YD6mx9U47_R(B` z(NbWD3l=%Amw5lUUBcvnj~X}E=7bek&y63|SzcbBIDnRb#bogCci*J+ugk5v72W zOL#<3FS<`&ZU8ZFnbmd0od)bGBr`Lj1_LokLUI}#CP5oQ2WR%tm17TbxPSDaeCzM! z3g`ZfH$=-c9Pjb(a6k}17z%x^-7mry+VWoF$)TLA8zw|fPDv&z!tLRWprbkBJK2K| zxU_OlJ5)sPdu$N$X#-9K(J+O?QJXz4Kg5(wtG+t9cV0d8{R)K~nK@7PT0iN2){&d| zMD!~`Wl9Q`d%xFbKM{uDG(CKqQ??5U0=7fsr$F+*h)ONa3ZUgW~iMq>^$a-HRB>^faCVRbUUk8~O2!;`f*JDKQY#@^2hSgDg42Z( zl;Ft2KF|tq5)vxyewzty@Hs$0>=ANjAQ#nuHYSK_g$uKWgv#Q=T4K&ux_Q5xrkeUdqcGE?R0tl4z+yBlC;?O;OPJFPlgb z-U3ybzOKw3A`y}71MhaoQ}Q->d@Lhc_{0QfEFmuf>YHacYA!eMh-Ef;sD_!@*$u7S zNyoLqNZu0BfyLpL!b=~P%a?B0xUe~IxV&kwmNaPHov^|%>{pYQKU|BxfaY#WZUon9 zO*r@Si!a4D%A~M{-(F0>22Qdrnge~bEw7^3nIeR;GxA~2e5evrakp^iWKC_vRkE{9 zrx>Yn)9^_MvEWeQ%S$m<)1jK`5h_qoanEqAqGb>KHvO5GKXvmyf6n(xG@CKyDo+*0 z$%$-8!`+35>YnkBaBjsiutN(_GeQe_1pgO4sQ1gK`4I|AIVUa_;Y z3vJ$Dj^Zq}l;)sE>-%Y87Lv2JNwh9A%NXO%WiQ+EE%E%ffLsfc7~wF6miKPrxcEXS zen5D>y}sUdz9v+ew_V1ndwj^ewaUzXjsXGTlt+vHX9dF`e&jRm-o+3l|Xm6DjfpG6VPnO zQHBf80(a6!UM=U2;CCf*wFPh2Jv_vm9gm6fg}1znq(0P|Nc-9l19mAQSJkfPen%7#oM{i(6P#D1`k)6NBM{?}(R+^FX3+-9tZ3mW4reR96Si5BW z^((ga(o$7_0ed`l=u>V&Jf?Rq8}t=RA%6^Q9w!5voZWqyPK@Z{p;A?m%kJ>LH)Fjc z)qI37=L&2Rfo$>(8%=e8cb_7upO^)=^!kgU6Ki|fLoo$n5)h|i?dYgj8#t#(N-vG% zaUf`ed2&$K-aWJLf^RuSJ56o(aZVE>lk4|%C1ngF@_)5mpkn6b=S{+I)cLou!CX{e zzZ&N*wykS(EW8;MPIw{UwK2ZRWU~@1))Akpv7MiPQ9Xb62AvfJNiIy|UElLzgv&*2 z2Y$((8W_ViY1HiL@y9>fO-(1ru3xw0d^<1~pr()dzQ2m8v#E$}7JUa2h417A{nwKca9~KAGZ~_*4r|VpuS~KJy6GK!w6)nQf>evD%m+rySpW4rL@MrY z2FmujAP@{)o4!Bww14p}>O^!lWTkW%>nJ~p-}mRsw^Zy$u5vHsig9vO5_wLgmEHf{ z+B0MdLF}Tt(P1*%556;MKgDYF-RR6+{L=*|N=THrc-h^(7Eias(UzTLe7Z>Xw4cwx z-$~d+Ml$E{i6VD6>1UH78%dkD%B7|!Q+O^9rS(^ zhvY{dztac1Uw&&`yE9BOeDye&hX@^Ec9~H&I7kPi9bJ`MRsY07{Aen`1b~jzg14h4 z#uA$cwvKK6c85#rI~#o4r#raN{;AlB9>P=7+Hw`GUmLL6U8puEN1FW}T0gQC>35nT-w|eNH1Q@q12vRDroGBWK&Ap1owhFAlN@U!d8omSX&n~ z-VRHW6ydU`T}JkMMlV)fy>(?7U7e;qETF!>zf_}NpZF@+E&Tto04%%LR~Rn@2`7ZI zztNSY`)}dV5D+I|&54G%@j@{$@Wb?Ir37BDMZV)Eaa%ESK9NhGN1<9dC7+H8nLqx$ zm>CtKJkc?fvZ|*OIl^|B@4&%q`X5LgSYVH#l_R8$b3Z=A!QqdM2$B=+3i!P`o&TZx z^D0bSLA6}ufl{hxq(J3)LoCnK@$WBGHrBKGKSVQypF-Vah*~$>))ClR17-C9-wbhO zY>18GXI_9mU4B3!6SAIGrCMik^cdO|@6L$DW<2%*}p# z>E&a8%H+a@$_@`OH(hu=zs^cDLg-18&f}d){O~^=K^#`->c#&^bP&$bSZ_Ocrn&6lbj#z$$TVGS!GWH=lyGk z6LF70S*?a|QF#XG;X0Oh!sN?T3}=n9Ylrhz}w-%aZ9w{P*YOD*&lpA-rG^9fXo zqE**(Iqw|Ob!NkrQc#}uO^cP`$V(MoYwnL3-HC^V4iYW#K0_40+udzGx}Uy%Kz|8& zf)!_kZ|L(NeBBX83g74|#u@t2xAuhK4aWrh-*WpvqUBwIQUA;Km-faCk5a7)ee?8X z$;I}%b*A!#HUFn5Ov!RxD%^^mvLOF|NUgnx#A6vRdLINlXKJn0mXQ%3(GYDH-8ncp zML0Ph^rrp33eKGA4->#zEg2eiGzOpk*QruXEvKBwkb3$32fm z{_mK@%@kDj*-QS+@L()zE%WEaLjRiE0O=_Sic$3=8LzF&Xbuj?DNPb*GxE;|bd_A@ zGwI>xE#4gBP_$y#ts?(Zxd>!dzbzB0_(sgQz0dN9;tn?Op6Q}^YQkfxZ^%i>+3@ zqNy+AG#oGHCf5EVD}R&<3%JgrT6uo)bgi$O_?0l}3`KoS3tP*`3jiZv$>|NdsK@d6 zBGDZZ;^uK;G>>!8nf^wh?Q74;OKxwNR<#1dKd4rqG9cqM!m*}qh2PoP2{{6ZY?2QI zHZiYoJbRR2|BtJ;fQq_%qecf27`j1F!I1{(5J?@ngdrrQI|Zau7`nTpQ%br+L8ZG> zk#3NZz6am`ckj3EtXVFXyzk796VG|he)irEW+an>Qp&5*ev~zm$EJ9MI)O^LJ$>B` zjqWEcZC;!0bCjLoan-$7e=n!fk9`u`n>Zf#G!Jf$ zp!%ci?Jvl6WsU!6*(g%?8)r-VUm_c3OMJi5$Sxx9w-++yvo0E{&h?QZD$R3x_b^V7 z5GDH)FrO$VEu}k5NligN?Zb`ODhpix7A?sXVf|YZsuIxeX^e6~ z1Y2kz=a6rp&d&Q48lFQETDTZ*oBGqbCFyclYK?VUu1mYx5_$hsFi^A`6k7LtHbguf zP&c{%3`swo>|*v;$~}M}AE7#-Nfy}U3t%h9BEnE3q`FzPo|k?L%aL?5$}Mt|BhNyW zeQN;5iSb`#!n}aG1o|8cUHB6a-H$o{W5V&J_VyZInCKIuwmHJE6D&$VhU@H-3Blj| zef|8!3vLmS1h)!g^dH5tXSvT=i48>(|GOvCSs{bfcrqwqQczq9dNJlhHtt7vxx5T? zq`5)GTz3{BojQ$#ubYxC-A-eD$8JS@B__0u1st} z##b0Fpgq^r@BpZmOx5>G zpIa+FcOI8ZS~gJAz}h3pwYKKj7%C2r`~S>Hx-nFHiDDbPM{=t2)5qqlgNoJ49@{** zWpcG1s@X9Dymo_Zvog}y}Igh@L+2w zhu8DNijlrb@l&R%FJN9w(j*6t1ZB{H)QC5Thn1+KBfi8GT57U%uC3TRaqEKRVKn zsMm$l@;qK7c&-kK{K;f7%&Cb*+vlSqOSivc!EMACx#>)@J zK3N_L5OepNE4RdDpv?&v-BYb22wmy3n+!MIYs0;tH_uo%qIIE0{)Ql~W#=G^*YV{9 zW%f?yv^j+`ZT5gvUUrloR;-u}r=wrWCj6jfcsL<$ATJU|2%aEZIO?GN_68g4?&aX%KnWO51pbYV z>wMr|3e>c{%+HdY|qfAYMx(dSob5 zVpi;lijn=r;U?NT`LI;v_w9R{ECVApOyh8?;}`W20h=G5qr)0d0&?I{C`Qcv#+aPn zo@KiZ0&c^wc`3wqoYb$NNH0)JN8vLC+=>EJ0v!DNTn8JH<1Gl#jsSNPP^6yQ&QAkf zjh@f7#0vn;^U%>rXqrrhJ>~5%%M%;^jjo)ZK(NC2v3lxj6 z67m~~x9YDiStziVy8I)f9@dXesM+BJx+Y%S>IX}HaJYxce`>S!8EMYDW z>2KW@ji2oZi|qgXd&tt8^xRaXFhx}6ZZ|rQF%E!1v<2#MfT?%^JSOs|*V)46SmDoB zk3vrgH5gV^wc}z-Hr}oM@&+;X+gER34SY?_0>3?`BwgM3ZaYYJ2~l*OeyKo2DHK@+ zfk;;mVp}AVBkG&ux;Xtr;{3fp=v_8pK%Jdp{Ce?sCs9WQO?9^hRPfJbk4#)*b3@kW zfRg8|F#M`Gj$z2BY;dM`@xYVQ(`~G*9#T@ul96|Sq1M#Uc;MC&P74e7pdvpJV%~C7 z?H}_YqP~Gsht*GHG|Yr-vv-fpxXhiQcggP4CqHHaM#^gUUv4+Kr6;*6|GB)xpWLD z&57=#^6Yhy&LMHn#nzOL?lRG}H#9u!rG1Zin;8D!gHL~y>iuU*?*uE`FZouA^}on@ zr=F`Y5Q~shDbwNwzD2+n%8G{)aK%BfmI-`%-U*>dE5$#9i5riz?!|`~o4NbQMm$`f z(T6&Ol?bD@3d*|`3e=pqh7Yqo9Qh0z(Vx?g2T^AN2y)8jP090->*b|H+_id3j&`+I z1|O99;&q0xvotsBWjI#(c&$OLG)aah6 z+qOx+JpAr?lH=+$00qTMabcKhMHvw%QE!a;D^i(wZ5knWcRC8}>Zzt1j-U2Bo)JS1 z44F>R>3v5+CnC7qo98N9>Tw9jz>$LCec%&TsF)eKvJ4!}0C!S#lHMK+;*SV*O5UfQ zp74cvD8z8Jw+{wGj8__T@+O+)Te?~nWf3|Ek-^2~o5flQf2(tZIRtR*@4nb;YSWxa z2`n^0R)jt=_H{+!X`C?)V5&DDO7R~7>LcJ_z-X015Q}^_Q{|{-6a41k@1<9+t^|#Z z=(S&hJujFV7LlJop*47hFG86yAxX8EFg9Qxo_HBEgBZc~ytOcB7R`ZCV4D%YR`H+B z$&iYm`@x*hszsau=roQ{Yd8{ib3w0CzczUL1X-9qK@|cUP`2L6O z`J7H0S>8qQlw0O$0ZS3Ie>;sH2}}VrfgHcje!K|r)BBQDCKhm2QG9`J|4$%rK3fM; zzOE?hp<>=U#a$)}FD{Lspa(GF`005xK<#t&)uY~WN8~GZ&R~c-h6#=?2k9Nev|^JS z?k^j+>uQPIf5B}tYiPA?^iZH8RfavY>Z0;Y`a*-(X>Vb8xH&ufv+X>`HzHk3v$wpg z;Pfz}gyqo>f(Vzi>b)_X?XW);_|C=UXNw#6^Bu67MS%kYII0ygMOs1J?LXuNA`O6> z9-{{VfhnyF-eZ9pKnwrS32IQu9m=4sFvFb!>0L$h-xForzXu4M9UteJ&R3gHSHNod9?HbNZFYX!=J~?Q0#F?QtJlo^wY+>yWu=U)>{A&o z78YP!v^4fk=-Gl~0f|XW#-;;w zc+#=PuCA`YGr|HNu$VA0F%7;mi9tzIdKh}rU85Qla}zj8z)HK1fDW|8ywpL<_uj?) zPX83yq9ZyU-m)%B-Sl9(rUZC9^gVjy3Qjrdsyl#J>d;KB=6Qkc-a_*fSXZFHZf3R) z);3V;nV6Z?n~(ekiwww88Uf)R2oS*f18SWf98z*}b--@Ey7FXUVS)U;+;4Z;n+L9s zGFz4!8q?qy5*88y)E>`YUp|1}11wKdz(D~t{cIr|N}eKM<5(K74wxl?O=xIvXz(+f zS*`dA2&r34+da+(dwN2)+guNSgA5_zg5~`L!7X#PB^*A4)%jFZRIhMsW_Gq0+qP!j zkVkxv5zODp%%5h}X4SE|0LxK|#3EBZd=h#a`4p|< zc$ES*=D5n?-Mis5R73#5oq!oA;hm1w27rXf^LRu`tLzkbU*wUz4hDXMuI}!pfV((1 zhx!H3ES}QP0RDRS$@%r!Pt=#d!Q$rTav%JH%8`IHWd(?7@k}boA~rTQfFWdQWF*$i z&(HrJ$P%V}!^3gR%*+bM&_wt{ko7`3MWQMRd1#$9c zlT%Z-c6Sx(!*b%%(yUBOB%-QP`0alyiXO6C*8!E|5TLvPxfc);17fd(HIN*DBuqm@ z4G?ymy(MI|eZMoB zEZC%xfBhQW7yRzM(pez-ahvu(k>LW&6d-s4<{9)dTtG_A#Iy;PLVP9=e}eCNoyNxs zWGp~~4YVD!GK&rNog*VL&7o<(b0taj3;{N+PvQ7uC07!mWU)(ntSok&AE1;WtXZ#r zwC7IiNAQP|X%62-r<`!@Ex2k$_MrET1405|&~XtpcwN>tH#gVUy8t>CI^HAc1T3(O zLE=|qJyQkrxtTsUjcIAxKxJ0s0VEh!fbrx3q_{wR0DMN@(Wp9&7x@u85fUr&5sBph z=qiQ?hJ7Yz6T7U$=$;)`BoO;~~?S;(Z9M3w}^piiZ*+!3`=N{?n* zeU-;}9oU7@K(-NHcZpo`a%z#y8tuoL6{{R!!vUpe$ywZiMB!SQfJ6;$2bWK(cPXhc zTq7GE0FK{S+83UG-&yMFzk2l*@WR0nSO`8kh7}1?7#z{O4Y^(I$Rn(YM-;9p#awIr(vydB!&@DjiYZNoN4XT6quH%8Z)x3}uR{gM?{3 zL&PAM+Jw^~^zQU_fWIXUsQG9P0{rMmsp#s>msR- zbV%hg+16~$*6$Ij?iJw_i6TVgFPXs9jCXc|)%uuLCNL-nU|3QT62Qm|(By!3N9?TT zqIq&QL8@6}EY{t@35C&4P?QI>;bAZE^lHnqnCv;d+ls8TS-(gHsLQ6L_L-WRm6`;(gev+k-So$AIhndEnj+U%)fPB{3gJ1^pm5t_th zpd-J&zE0qkX2;r7`n<(IO7y$|I5a=~K>}BEjHx=IT1?dVCQ%>Y>eUlN)}ilfm-^Cd zA0LC@z>NWlep>l$@{O(oW6{(=6xf~gbJ>gk7Y+h^P%1%|70k&Pke>clON+Ag;1hr8 z^+Qxt)bHxAN4HG2)6Q`%U>-02fg?0bCOK&1Lr0dkV}Y(;BTsk%sV8O-d21lLf;PY>FCAL>Hne#*%} z<8Tv~Y$$m#P5D7F%NO`;17Z%{YJ!>cSka9~ctAv$0HW~mq{~K2CAUnhnc1L@v4y5` z20n4?HU9(3xLv6S4K z?QsNh+t<%npJDgFA;ac8FJnvJK2T6|HqNt}{pxN)HV(=F{;*t0&1BDTM&dOM!8l)x zGMKW1RD?2x?xL^Eq7oc2vIhjqAPr$js0_<@Rj(HQvyC&i38^?fF~?5p5Nwwm*dFfz z^l*1n^sFw;Hs@WuqxGY2b`1f_N)?dQi8KXV5+6+&s!1Ip!V5NH=1xWfQchnJ`OU%R z2XX$fOLPGe$EEr|OeY@iFL($$7=P=&wcGFS%mqBEo3&_KY2W*F(Y`M=?u$V<@Az$q zM7458LW391Y8nIt2%MbcNPV23B4DS26D0b9)|b&msT_iRKbi&;^S*Qg+_%R|vB1ZN z=a_FnSeVzV|G2*;voKSLdtt(^bzyUBUv)xTjkxY@cZ_t;IrQkygILsAI0rG>qt)t z^4YD(@nnuuIVwL>s4y|a-oC9xp`3uK zWok_=eW8TGnrtX1md31XM{NQG_v3aI%`Vk4PO_`7!#AnAVgt?Zx--fwPewTi-0T)0w*+qdS=yPS6$tfWKA z8B9@S9Eu4Wb3Z&54Napl(Z&CZBJ#QX0hosu(*>E%XUseT_PXW=QvrZT_Ma- ze!gDOuLyrM?QI$|Y%_;r@uUY0L;Z=Y(%CtJDwosa)cUmgojlsv=h_z{A4gGtdH08b zLmXl~{m%P)XdKI%k5@OB%l$jt{in-Og^*u+3t04(Y0b@zOT;ZY#zUH+_H1~*O-+`l z@jMZhXUpT5cWa1EjYc&%JjJ9R_V|0;Nmtx48vBJZhZj@Bj(p!oVQS;QrTheIq%v5q&X=$JgKb^OTI@BeKx?PB4xVV&uc@2Ej zE0`*ShGd!4OfiJ}x;u|i0}s<43R7J*P_Y$vju_Ty7m1Pkek)~m?`=9=s_RxL+RLvi zD^bg1zrnlEYuIHa40nc2jIKPk$&8*;8{%}6GmOfJ#1on-8vN=Z5iADH#))t78AxX_ zDo3nhZv4i5Pd_|Ck%K`2Td`qzU0#tKGkJmhH?1U^2T`Y&j|eLxQH4b{ai5&!XT zm5bew&#I=ZBCZ&j@qXU}S^<1JnE6F~vNz5smj6}B;;+RlW7ZQ9R^5y^xLujRarBf1 zB;;!m;;rx3%wVysw=Fs1$Gm65z#W2ij^yF8&4e1T#dz6Tm?bm56h1iY+Tv3E>DMLt zIH|4dO+ZS8jjK4V>Vv^3wmJGblhWE%B#Ia^K_aOS^ge&tFN`3NCtk!&sCA(!iUM)~!g zG#=<3z>1_je5Q3A$^YnXw7FpMDCb;+#n9|nC`oF8MJ~)ljNj{dPW)%j!5(;|3f=ugV>ON8 z#yWzHaVt#r9m+Ncb#)tGJdANcDSzfk@a2A#*`bQ5?>%`{XvWzDL()x&Nj?{He<&X` zcD79w!DW0Pz@cxWk=$sbtN-NE#YSVAe7~(^-fYRc7C!$LrIfH&oPVMg#4oI^o4yPkgeZek1<;t+`w>do-jR{WHzM)dH-#v{1L<$227 zEI{pj7Ut(|GlgEzbBz{bbGn>!F@JkABUSqH?ko`~B^1DL{R|y(j2PBUK#gUZq|Gsk z$BVAmDy-Rzw>h&=N-#SOz>w!K}vuv=oHg)<7ClKz`+2lVm2 z?tqnNZVRMMXkfzYNZFfxXPM9wRn1qYYyH8cU@Hl3dauD{Cu~Uh-V6;pyT!k-UId`WW#$z4T_DHeh1XVCo?r%u-K<`_wz^zm zrDIk3Kw}%ThXFH zS}3M5KR>^K;#;7ApW+S^u<@j<7GBud6i|5_@(Ebqm;7GHL-paf|06Mr;19xz%+0`{ zVk$1;Uib!CNYGeumaM^2Y;;P{KobfC`h&2_wZSc!DzOJtwJ_r<#o|(U+4?nA&bn&0 zP!7t&nn>jzX0=$TCN!q2*6X`eSi}>o+fpV>vB(hd$|eWk7@y@Slc>Gl7XZHrpO5ig zDZuWgpJ%flo&Q+s1S7Gt$QpxoKJke+QfanS#m@`L_gDnx@zl+6a-1t4jS-3DuP2Co zd9%n6La9dejAjd8u)V0J*057SfcVtrW?0AXpmwQM{lrv+8_sWbY(7&i``?K+u|~70&)Ad-3Nj;zq=msR8Ea?|J~BHrMe3wKkfrOn7hv$ZIK23NDhjr4V~x> z4(d38_H+?-w|%LKy(d6?GtU#z>^M~}XK(+h|8!Hmo%P(!B@)Ka6;0f3!lqPVYxFGJ zzT_Luzm;f-1v`O+IqNK`Ke!86a!}Tsi*Vw3F|s6sDvc8amuJSeo2+$vX7WC#&r%}cG7XcshYe=r&ofkbwB^Aaa>?4PE` z4}(Z*L#e=^&$xI6$&JQ-{+~9-_JaaX_ga~SJXw!Y2s`YTFSXOKF{=u{I=oVXu0pf5 z;xwf(`d(a!g~O$T$FQ?I7*bj!i-gz_Dw8v%Ecx6Y+K$j{csR7@lMwcLl9hV5occ26 z-OuQEC({pKex1eD3th`O(E4v{I7AGOOvp*xZH+9rd6LvZu?U<_P3&A zg@Jz8PEZ|!X2s{p#LX@vS_z5Gy=ZmF9Z>v~rP$Ki8WtJ~{*)m~N=&@CxNta=9=gmD z=+DC^b6jyZF~ZkGo?#K@*VRoLa{;~O%pBo$he+q@>Z*u{2#~mSi1lVVh7~;9iwX$| zxw%qdypegDl(ugAv*psY-e4W&*V%$7-pzjV*bUUPAm>G6=HsqNFVkLECXz@{)-*AOoSnJ4a9F4-PCI@2isb0LyO!qV*K)aLq-OGE%dZ%z)1l;7v4qZJ z(f(e@VoaEbvk*9RM%oExO>Qtseh|v`C4}1NbsV>pvTE_yw|0JTvgzn3s^GBfUI95v z7XFP)#&Ug>NYgFNjd(%MxgiLv0ZK6h#UjR`lfTG|TE93*2j2uJNszq3O28>n7tt8j zQptIwXq$c^SCOgrF$!PpwkPD}D{I4hZjnFv%%3nL;r}KZ;7M8^&O!;2h~Tg{A)y^9 zCeS0&n+L0S6G^uF2~@-qW5=u4HXHMoC5l%SyXsl`=2yvoYh3r7Yd4BtVE;V7*tsV<5jNP^=8Qsx5t~E z>E1M#_?bFmTTZi;=0Myth0NE#1HWORK=Dc76K^t~bV*RjlEC4QUPCb}nau+T;IMJ0 zTliw%@x*#^6b9Z~^vt3GK}8B?+(20|5>hAreGaAQk1^JJJNuM;S4aN00~@Txzu_>| zNUHrj_bdWSHJX}b$J{t6G7w74NZ}4Y4EP>F$q6^-RC(sRl0^X0pTXzksgid)S2IBA#2KMQ2UF!={XANb z)$&2jtaY>HodA2w#{3bJC>r%beS(7H(jHpYuO!FzWbUd4`(@EW1#Xvk?0+$UcZWum zQ+9yxE111%tZcI6wD;PX0n$S6=zW;I=)z~12kY~>VY^=_`DVU*kbm$iS5>#&3C|w= zQs>5YcyzgZeJ0_!v~d65gUzyONM@R-34(2FXatLYU{QEMQ{4256kz&a8kf^t;jWDb zRUFQ1^Sh46{%MWhhW4XAsmO#Iq0n~0)+u=(;N002KYQl6TRY``yzzDKIb{R}-XnhR ztA-xqyYd}Sjicz_)$ke{<^4cH`W{p$g{+F@D+8e*RffKCw-Q3zVhi#N1EE&i7ncof+8bI3d?vvF0S0p)3ZU{rY1xLElkiDOEHrgB7 z_`8Si&u~t$Z}={>*S1xngh?lba3EML*eF>IO@Ed9X0Zitu7tT_%|f5kF+m|7c}4B_$;^T}tKGr8c;|xu$vgbkSp9 z7*bSLb^>~CxgHvVQeUG*Z*OlC=#m9YVPybAJB2I1xVRV?4uYRyU|d4i25n?BfcL1XYJ6|fy0|_y3>G;j)y;aZjtOtY3kmn>7FKm- zZ5fj&;}opEnO)33e5gn3sjNJeh_Q_I=tPfuTX}VLVf9}#!1zm2-Wd#@!IHn~Omz3yv?ACU7OXrR-3b}v|Wx&67X;;*EWt$CpKC%QJ2<~@Ds<&sYyN4l`bL*LmNCb8rB+^NWW zXt#Odi8e%$n#QKL{3q9E*pOaqtkNc|F0bA0&ch4n9jB|(s4F#emF@=~Z)yLTi3V^$Wy*R99Dp)LofZ4^r zkUFQ2pCE&cMoJR8S@m}3=4c%oQk0kXe#CLiwg3gqs6ISGE&{u-WBCpVT7Esx53~Hp zQxzILVyw9 z^D7iky2ix90_?tV5RrjhNgxiz)2kPsBqEexgNKedV4p~lz+rW6<`bcmYQodnrq(v! z5dy>;Rp~pC;o*Xi@j%>l3EYexQJP1#w=l+hpgp4NoE&kURv}H*#Ao`QSzl}NkmvSvm#TcVeWizS zy*=d7MvS$H3?%ojn^S&RFMm3;cs?duEVqGycCgc%06rKP z@*U=U1gG?g6;kV2Cq0c|vp+~WLG~fK;r6nX*;Arb$_&2pWodqL2+SgqDaDVvk`q3y z(Zpbef1L#xe9UEx^3vXxt?WlLyx#6%K+#Q=gYOFnDG@O-P5MjsNV>2>ZR|lLvH=g+ z^pY&t*;GDNq$Vcrq)p@x@Q{{40ePXD-5(#wFFm7K&r7EvyY{^oOX>RUfeE$+@SkMDt z_u)u*x#R$u2ED^vUH_hJ(_!GPkde&W&hlhs{W>N7P%x!;QJrXeD&2aKV_LFZY!^Ro zKAEL?Ewz;*t65>eXJ9kl{!P@XH5%FHwExI#tL>$jCq&8>SXxVU?x& zg0|ZuW=e6G_?|z=@TNX$N@jfI;O+x9lwEsUwiBbovi%M+Gj4f|R-Ue|4@E_(NA63g zNiZd;vqYM>XjV4J1u$l7JEIn<)&ZiIs-BC1Zzo*e`epl zmwD_cD+;0D$d=c>)i?ut#Ws#W+~wSICAiVTo*hr$ z;Ho=_R76D+0LZ?}kUD!;?vVkfx&Q{Q0th^@v8XQ}3&hLCHss~evhm_E7L}I8zwR;V zi-sMg0w+yQDU2XRbKb1Q^9)iea4isbg1yf&8=AHE4kwtkp3ZD?j0lx2P;=3r=g0D$ zZNFs>v3~<)v1I8^pXYkNky@BZuekpxi=dbuc~N>hGeQSaQvg^;HX(AIA4;)Ljc1EB zLdF+cuLzVz9)Xj1Eq@RdtJg~WjWy{>bWV|85U%z@e%O1ib<{4xUa17a55@Q_D@#?v z@xcUT)O>Hh>Xv>}vm&%&?yRaQ(NUqI+Jorxq~-x_ZV6fd8@5ez18eodrv{oB5di_p z`FUUB^$+X>ZVk}{f2d*rv|vR|x%uQ?lDiFz@5>K%-WmLg;}8)3VVoVhrRI#GJM);_ z2^=gn?3}Ot>$}F{*pX{3CZ{f#8^B=ls?P@KTJY>xtf(X9!)id2hEShYHSp%WmzBz!+tE4o-%S<##di8##yUeY73^$& z!lw)!i_&YNn|&~9L1g9F_rOw0o8IsZDwB@#SUKG#he3ZE^>V9OtsHy$a zl_uLr3a-v7P|8s`@DetThyd-$f~~>r3e0j4h^3mEeq}}$*G)-eZynK5?~%zTA2e?u z!q6(_LTw|KDIEiNqp{?@xqlZ%6Ku-o+kZQI@Ve48GsQ&5AWImph~e8N#&~tN_s$G4 zXm|$>x+24wn5Ec1B}#|!(b4(Y*$TwOLD={yEWV`!FEG|WHhV=b_>8PG;G<1?X_nsW`6 z6yrA?2?bp*RnnnGN%u3|2_RoW^i8hS{+%`iR|!NX86?^coPBEE63!TDlDr>*4I5id zD!^?T8VIxkgkUw(B@C2=x$g`Rb2!hacs9sgTzaD(LYB$v?S7J`{&H}oViT;yVeFQk z^WminSXcvXTd#W;s$ydwz~1|jQ(|RDUO>}vTGam`^OVnw(gxv<=o9IB3g#+JY40YA zRSXQq{~oq;&qc$wQHn-#Z^?OO_ZC56!4>;zP*h0ocj=$G`btT2ymbKO{yjH(_}_F$ z{W!oRWst6RRaN~m-W!t?V2%rVf>}Yv2h+(dst8tGU*Cg#xy%e6nV2zw zmnTUHi_}U^Up0pb#3_Z72zNbcK2AlvO&(@mCfXDhnuk1Lv-OhhK48_ZqMAqjM64^*uPKTWDdQ5%qK4H$#VU@f^ZN6R3DB}{kovrfH zw#0G3^4=agBnV&3*m!ihaxOOZ2^ZHUNCFco*liBlG@qXdsHAUX_cptPf!1Jk7P(T@ znFBUIn6cy11u(bjYGxsG_xsGJ@(bq%;UIwCzl8Qw)kp2z<4=-kfKfxKYzqc8$Bai}|OapRhk4ttdJ9K@_>L>3*8c z)%?cN+Sdyu^|xM|^*_6J=j9YdiHMJY>p82Q>#Gcg+3brxtN?;We1P34L3>7?YWz4o zdK|iDZsUooND~mBn8>E>oJa_q^%Wf{Vt_#k^GS)OPk-@EX;X%jumiqZ|MgjWD>2d5 z`9+h5J66^gQdZD5gvw?*a=IBJ8@twynrd|4PbykxB`g z2alou8(9Q@q*5881uHHDFQUGfdsN48?*?>CI6uNiRbp?G4hT}|S30k%qNGTw_;qkE z>zCFcuUP(vg=e$&Pu{&0eqC8W3YO;`cy;dUzNyI+-ya}p8{|3PTI=W>h6QtJw$DW> z$k=+0j7YT1O!@j5O+^U@_sPgLr>AGa}iTk$gpZ0t2n1lgBAm{sN)i*OGUZ~Aom|pTG{a%)XV_4oo1yll|=~5l2(n&lQ_0Exog#+`u|IW7I3P+{%Ou4SzuD`cuOH$K^FhZNN> z%2J8moK6!25>xRB*-Ra?UAz)zm;5K`9{8a%6ta^C8*H6XlQc@fpRaALEUfw@3mV=*tem~VlCS0n}d--E{H zzI)jk+GIW$|IPbXe^uG$EXmo)<|`B)vqHHf>e;%Jxt4QlNyO{<=ue=Yd@B(ls~AD=@iKdZ=@0sN zTv|TkR`dQ1_REE4^{;Y9Hf?pEQTqI!V@EapKtN+If3-fnTQPG0(Vk5cr*ue7S3zY(O8g8vW~WE8T-S7=P^JuVgy`{m(a4}o*wTHM0`cD+5}IZ`L-m9 z40W9Sq{hgy{mE86Nz8B;w^O%~o75$f?_Lpzlk%{-AgvfQ1tX)kx%asrqFEk_@2TsO zFuLuv1boy0F6)pl#yR=8RYAIMiylKDr0Fu^uT=YA(5E+-WR;iCLP`lO?}JEnmlL+8 zN=_7?e{xMk8ubsx#uEK;XOKXEG9+YtBzFo>O7`0o0k_0-FmGBX{(0OM#STq86B6&@ zwvG-Q;Gh(4bf!;1*FpceL@}AyfTm0wg@m`(VO3^P$l_?7nlI_`bp=t$0}5kuC1|DO z{~1}S?Iq$jXvvKDL@|%e#qNEEq{bOIgT4v@J0E8V2}vLm&CkE9;yOCuB(amnnz6#p zv3zigu(vU>U|892{x`_YQ&1a7$OE|&$`go%RgOjSP(ng&%WQW2nT{^mq+W{mE13BI zx1ehYm_6IA1dx%>ccPNWWyXq%JVTqb)XgYGJ{npEbq1*r5Ib$`QR8~ zc~^ze@hnG_(9hAPSgCF^m0`j#SrSfPorf2|G4lLh510U)QQopRZRBsGwb}c~3wD;f zdbNIp63u}wA>f=j@RSiUZ&s?5Fv}#z<`KVc`qQOAZ>_YNKJl3vjeyl=J{xcgNdDW_ zAf>zj(HJ2W5ih1X_n-kyNuXbf(a!JwB?@C)PhQ6I#XXF18tCsYMO+$b6ccQh?_)Xt z63Lw%ifE+OzV9q}chJW1;a#wBv+dKPsZM_iD|W+~;>xRXR4ka^lhh{{vTFI6>;eK> zV>fVwG>IR>Tb&7>=W4k4i%y(+jRIx}5zr^cEpG6g;!5gM`#qP@i2J1g@o)Em z+JTYHSkV@4Y!zg}_ly`p{8Xg;B4jxj_`0tYMe zZsfrkTG>o6`%FOfSlr_A?_C3*T5TMj+Ksu604YdO2=V?9SEqGLb^pv%)ZY-eaB`B` z+v;hl;3vUGxp`f3lwmOLj`@Jc4moma9D;O-fdsq#G?-4HLNn70*gntn@NDMTOrPhD z(ArBpnZb~Wt;HRF_w3Uhg``5Vh!7kfcNc5Ea>Ch4zFbZV@kWpTB|I zK8`tfKhiFj_y{#?Z=R`sk^);jA025J1use^*g7za^!i__$xuS*P@+`x@^P7a{(*QT znYPfxN0ahLp^}r**r!z{pxMq`eV=R4@u_V50Y(4;I3({bO(bxKkMd9p-ivz!UmtGM zsS09N=kQ7x{Dd7PXwGKTw;n~V4oau{^1@RkVdMYHwwHO}jGsR#O=mG{eJ~=JgtD5N zl@~BB1Ycy{DuD{+&SW(M+DnD>Cdc6?%pxK-;7=}P9sd)W2u391|NE_v*eu6qonK=b za3_uGM2^B4-z%z`xZOaV5U!J#`$twmj|JIkU6=U8rf*6mA_%$&pF;iSgC4g^@#{ti z>PAcOYw`_ceal-SqJakJVg|uNn;u_7Mz$^IlldOxOxtV><9+`=AtOT(6T`Xl)6dVL zy8fk_IEId2N@cQT&i^kOjsc$KWK95()-oO0DdFhac1*`3iS5)Jo5GwJ-krf=CE02J z2CFGLBD3-DI=d-(H#V#pl$Ou@o&;AvDUHA^iCQ_zs9>5I14feygzB>vH2|3@bKf?{|1+@NfYEdc(;7eT&`PeSj@5{=_IDy1FFE2bgdI>x#5CSo@ zD9>=rRO-dW#s=cI@4wX2ifwXh9N{S|mnb_tJ!NBN{&RXtFQcQSwY9xnQY$xz0(Oq2 zm6Za0TvAd}>tlOJZ(pC6r|0~_$sAgz8Xm6M!P9p}0B@YXXFf=Q$iGoeFf`YYLVh>JA>d~P<=nM_ow7;wQDaV zzIo{Dh5UC*zXL`lE}#h-^v`@d7-g4UkK7kRGBx%f*L&LpV*3aem~fm)-HXUBY^q)o z+^=L`OQoQTB`jD%k4)X3AQp}xFYFao|C>^V7Ru(yPTA61BI|&vqKVY)2`meA;Qsv< z`g!$DSaCZm@&NQW0vaZH1qD(nU|y;qEjaUlF7kOgzCV8Rb}} zXz-ZUr*PFMdWM(c8$|9zv@nGI#emq+L{ZhtZCeJj`b|!7i>Y>bW#2pfc{Pi^a24q`6i%C0=*a>Mo2>b0&q15?{RNl<_pJy$vqg< zZ{q_{a@C?yd1Kr=!SY5tgKUTqhG0vw^ z(9$Br$Y>7gTcCX%xZ?v+j~CEwfZB~?4UoA2d)BSv%`q!0tLFEcTmU#$*LBMW&*yV> zD5asH0oqflC<;4)CM`e)V{c>Pwo0~>!ozk8?KpjWV- z+bZcPfx;MA0v3xcFB};`XQt$gGOj96fB}upgDWgRE5Jk!IzJHkL0fZxnB|q156;a! zv_jHuG(tin+bT4jTZBhOMu6~dYmvoRP|7y7pl;(xmc zSTaxf`}_0$?-O}4t>OzdLC>K~0Vif!T4T_&3Jf;7zX6ap0%3@gi;Jl9&NLv^gYV=5 z-sPgAq9eyb{ttMI|DE?m2nP>ii8w8hACIOsIpf3x2rxskrz8Xz?cA zV)Ul?d{R?aZ$BCoJU#t?8oTyzsM9?@E-~$FGMgtvYUzx2-8vC^OhRrkR>(%~mN7zd zNSUG2POP$v9Bs3N&84B%ZQLzm#n_cgF0+rzAu4ILJ2**0ES=Azg7Pevq;p`o*w zB``c20}Ba!vZG7gI#Q`)=}Aw|e4JFF1z_R=GR^qZ!dxymK;Xd5!iXo+a*Y)dvM=K< z?=h0alW;c`a#mzzWnp5AtgH`*Q*yz{*%{89M2cP2|Kk0rwmFsJp;aWyY6I};&0%Mw zyTRk(5y|krWI8$Zz_1KcZVlk`&xzd|H5jAD=}R0?H$d~PZ!}^P+(xiP3kwTj%?0K@ zD9fe7Bf~~ubwo@yy@U&-5BPBP5vQ2XlWe&;#$i8qbbfuLrzht_098J@Pd=Z+l~Sk;_c?( z76?9n6wK?}3=hl0l_%kkibk4CZb-Dla_^UNiu= ze!UO9b?AS4=7=hX9B*&XYtTs?cpGpmQq1Y)AIMs{xlxT>=-T~voO#IZSF3w-)6&x5 z_6MT7W|*#S5C})WIndHi4)J5BR-h>Vix%gb4M^LIp~*fzv`6%SumA`SehT9wR2jchr&I~L;O>VP0h{QG)()%;@YMrb8T&H8qMCI_o2G} z%e%ksHZSx4O%sa{-)A#`}S>&uOOf*;3q8= zl@N!&E0=z(rx($FSq3cK^R~9h!lW1y%DnK!>mxqV8{oz7PcFjD`-_9?CJV2Xk%OLBB^L7BHiT$(A&x6ve0 zr75YY4h{}8+PvXG6F*8P~mda~pB>gr6UYo2))uGDb8*3z;J7G1@bJU;PB zzPr17hy4W_jb@7cJZ|0ZdBs266@;Z(R9p=9{xmMYVeT|=%WON;hhk6HLC_1RKjR5Y*pmWDUZ<`ae9mfX zYHW@jizy^+#kShq-;D-E3>Bs9-WW2*tez}{2Dks%v$GjMAIMXno=!ng@q%P*XllV+ zfg#@i!`I~P*$-}HWyOFL`_(oLxUY&adE9$z{sV2I!|U&GBpIg>z>DY(4)MzJ*1o&` z=k+&Dob@tnfHUw_tMY5vsiuaaMG~jw%HB$(XSieO5T!qlAPGW5c<6NB0_B@GZlIG3 z5hR&&DBN!76kAJv&OH=ycCsmp$5T~S-aFBaxJH-p9k`MT_`xhiDOLOGqwfCxBoH6% zJg<9y<L%9KGVAq~m4-);LQIs=94a594;&O(nxL00EjPhO?~BZa zpg^$H$fuzk8-$FE42-wo6vtHE`v{nZwJU6G1;(Lf>Fw`7RQcn>2;TYMmp=$_jMsWBM5q+WmrhapTGb_mE{;f1A{G>iA9{8>~(7h zl{Vu89H~Txgc#v0A0b7Uv7K@$PRiEH9q4|UKvdK$ENp-6T^BK$F}`Q_Zo)AVE=TCI z1U6fi)UsLOd9E||JH|BXj{I}6=+$phMO0!g3){=9q);PRc_B`{P{!vo@l{wV0o8#r zwYmldQ80TbidRd2CZ#T&OxLSp@S((p8ZwV3yOc#T_XE}ChbY(-rOV36(R6&5hJ#QmHpP1>}zic{e|${ zDZv*GELK@#qgjhC9NwdT|Bym)c620t_A86Yq?w7AmX@&Jvl9{oISBV&c4z6Bw(cMY zyH2tW@yo0buwa(r(0u~owVIlmii&8Vs=U0fr{^9jst{IQlsQBk831(jBS$Ra=B)k^ zj;K98-qb~GaJr5K-;W}Sm2#@=`w;Aam%@KXKML>v{5}}^|6Vuu#QIQoX6E%CB;h%3 L_nB>_O(6H*U@)#r diff --git a/src/find_split_gpu.jl b/src/find_split_gpu.jl index 5d979f6f..37898fd4 100644 --- a/src/find_split_gpu.jl +++ b/src/find_split_gpu.jl @@ -11,7 +11,7 @@ function hist_kernel!(h::CuDeviceArray{T,3}, x::CuDeviceMatrix{T}, id, 𝑖, return end -# for 2D input like 𝑤 +# for 2D input: 𝑤 function hist_kernel!(h::CuDeviceMatrix{T}, x::CuDeviceVector{T}, id, 𝑖, 𝑗) where {T<:AbstractFloat} i = threadIdx().x + (blockIdx().x - 1) * blockDim().x j = threadIdx().y + (blockIdx().y - 1) * blockDim().y @@ -58,11 +58,11 @@ function find_split_gpu!(hist_δ::AbstractMatrix{T}, hist_δ²::AbstractMatrix{T # println("hist_δ²: ", hist_δ²) @inbounds for bin in 1:(length(hist_δ)-1) - ∑δL .+= hist_δ[bin,:] - ∑δ²L .+= hist_δ²[bin,:] + @views ∑δL .+= hist_δ[bin,:] + @views ∑δ²L .+= hist_δ²[bin,:] ∑𝑤L += hist_𝑤[bin] - ∑δR .-= hist_δ[bin,:] - ∑δ²R .-= hist_δ²[bin,:] + @views ∑δR .-= hist_δ[bin,:] + @views ∑δ²R .-= hist_δ²[bin,:] ∑𝑤R -= hist_𝑤[bin] # println("∑δ²L: ", ∑δ²L, " | ∑δ²R:", ∑δ²R, " | hist_δ²[bin,:]: ", hist_δ²[bin,:]) @@ -74,11 +74,11 @@ function find_split_gpu!(hist_δ::AbstractMatrix{T}, hist_δ²::AbstractMatrix{T info.gain = gain info.gainL = gainL info.gainR = gainR - info.∑δL .= ∑δL - info.∑δ²L .= ∑δ²L + @views info.∑δL .= ∑δL + @views info.∑δ²L .= ∑δ²L info.∑𝑤L = ∑𝑤L - info.∑δR .= ∑δR - info.∑δ²R .= ∑δ²R + @views info.∑δR .= ∑δR + @views info.∑δ²R .= ∑δ²R info.∑𝑤R = ∑𝑤R info.cond = edges[bin] info.𝑖 = bin diff --git a/src/fit_gpu.jl b/src/fit_gpu.jl index 424cf1db..773da171 100644 --- a/src/fit_gpu.jl +++ b/src/fit_gpu.jl @@ -25,21 +25,21 @@ function init_evotree_gpu(params::EvoTypes{T,U,S}, end elseif typeof(params.loss) == Gaussian K = 2 - Y = Float32.(Y) - μ =[mean(Y), log(var(Y))] + Y = CuArray(Float32.(Y)) + μ = [mean(Y), log(std(Y))] else Y = CuArray(Float32.(Y)) - μ = mean(Y) + μ = [mean(Y)] end # initialize preds X_size = size(X) pred_cpu = zeros(Float32, X_size[1], K) pred = CUDA.zeros(Float32, X_size[1], K) - fill!(pred_cpu, μ) - CUDA.fill!(pred, μ) + pred_cpu .= μ' + pred .= CuArray(μ)' - bias = Tree_gpu([TreeNode_gpu([Float32(μ)])]) + bias = Tree_gpu([TreeNode_gpu(μ)]) evotree = GBTree_gpu([bias], params, Metric(), K, levels) 𝑖_ = collect(1:X_size[1]) @@ -107,8 +107,8 @@ function grow_evotree_gpu!(evotree::GBTree_gpu, cache; verbosity=1) # build a new tree update_grads_gpu!(params.loss, cache.δ, cache.δ², cache.pred, cache.Y, cache.𝑤) - # to be fixed for Gaussian - needs to account for K columns - ∑δ, ∑δ², ∑𝑤 = Array(sum(cache.δ[𝑖], dims=1)), Array(sum(cache.δ²[𝑖], dims=1)), sum(cache.𝑤[𝑖]) + # sum Gradients of each of the K parameters and bring to CPU + ∑δ, ∑δ², ∑𝑤 = Vector(vec(sum(cache.δ[𝑖,:], dims=1))), Vector(vec(sum(cache.δ²[𝑖,:], dims=1))), sum(cache.𝑤[𝑖]) gain = get_gain(params.loss, ∑δ, ∑δ², ∑𝑤, params.λ) # # assign a root and grow tree train_nodes[1] = TrainNode_gpu(0, 1, ∑δ, ∑δ², ∑𝑤, gain, 𝑖, 𝑗) diff --git a/src/loss_gpu.jl b/src/loss_gpu.jl index e46ce788..ae05414a 100644 --- a/src/loss_gpu.jl +++ b/src/loss_gpu.jl @@ -43,8 +43,8 @@ end function kernel_gauss_δ!(δ::CuDeviceMatrix{T}, p::CuDeviceMatrix{T}, t::CuDeviceVector{T}, 𝑤::CuDeviceVector{T}) where {T<:AbstractFloat} i = threadIdx().x + (blockIdx().x - 1) * blockDim().x if i <= length(t) - δ[i,1] = (p[i,1] - t[i]) / max(Cfloat(1e-8), exp(2f0 * p[i,2])) * 𝑤[i] - δ[i,2] = (1f0 - (p[i,1] - t[i])^2f0 / max(Cfloat(1e-8), exp(2f0 * p[i,2]))) * 𝑤[i] + δ[i,1] = (p[i,1] - t[i]) / max(Cfloat(1e-5), exp(2f0 * p[i,2])) * 𝑤[i] + δ[i,2] = (1f0 - (p[i,1] - t[i])^2 / max(Cfloat(1e-5), exp(2f0 * p[i,2]))) * 𝑤[i] end return end @@ -52,9 +52,10 @@ end function kernel_gauss_δ²!(δ²::CuDeviceMatrix{T}, p::CuDeviceMatrix{T}, t::CuDeviceVector{T}, 𝑤::CuDeviceVector{T}) where {T<:AbstractFloat} i = threadIdx().x + (blockIdx().x - 1) * blockDim().x if i <= length(t) - δ²[i,1] = 𝑤[i] / max(Cfloat(1e-8), exp(2 * p[i,2])) - δ²[i,2] = 2 * 𝑤[i] / max(Cfloat(1e-8), exp(2 * p[i,2])) * (p[i,1] - target[i])^2 + δ²[i,1] = 𝑤[i] / max(Cfloat(1e-5), exp(2 * p[i,2])) + δ²[i,2] = 2 * 𝑤[i] / max(Cfloat(1e-5), exp(2 * p[i,2])) * (p[i,1] - t[i])^2 end + return end # base approach - block built along the cols first, the rows (limit collisions) @@ -62,13 +63,13 @@ function update_grads_gpu!(loss::S, δ::CuMatrix{T}, δ²::CuMatrix{T}, p::CuMat thread_i = min(MAX_THREADS, length(t)) threads = (thread_i) blocks = ceil.(Int, (length(t)) ./ threads) - @cuda blocks=blocks threads=threads kernel_linear_δ!(δ, p, t, 𝑤) - @cuda blocks=blocks threads=threads kernel_linear_δ²!(δ², p, t, 𝑤) + @cuda blocks=blocks threads=threads kernel_gauss_δ!(δ, p, t, 𝑤) + @cuda blocks=blocks threads=threads kernel_gauss_δ²!(δ², p, t, 𝑤) return end # GaussianRegression -function get_gain(loss::S, ∑δ::T, ∑δ²::T, ∑𝑤::T, λ::T) where {S <: GaussianRegression, T <: AbstractFloat} +function get_gain(loss::S, ∑δ::AbstractVector{T}, ∑δ²::AbstractVector{T}, ∑𝑤::T, λ::T) where {S <: GaussianRegression, T <: AbstractFloat} gain = sum((∑δ .^ 2 ./ (∑δ² .+ λ .* ∑𝑤)) ./ 2) return gain end diff --git a/src/predict_gpu.jl b/src/predict_gpu.jl index c67a94ad..b793c5af 100644 --- a/src/predict_gpu.jl +++ b/src/predict_gpu.jl @@ -1,5 +1,5 @@ # prediction from single tree - assign each observation to its final leaf -function predict_gpu!(pred, tree::Tree_gpu, X::AbstractMatrix{T}) where {T<:Real} +function predict_gpu!(pred::AbstractMatrix, tree::Tree_gpu, X::AbstractMatrix{T}) where {T<:Real} @inbounds @threads for i in 1:size(X,1) K = length(tree.nodes[1].pred) id = 1 @@ -21,14 +21,15 @@ end # prediction from single tree - assign each observation to its final leaf function predict_gpu(tree::Tree_gpu, X::AbstractMatrix{T}, K) where T<:Real - pred = zeros(Float32, size(X, 1)) + pred = zeros(Float32, size(X, 1), K) predict_gpu!(pred, tree, X) return pred end # prediction from single tree - assign each observation to its final leaf function predict_gpu(model::GBTree_gpu, X::AbstractMatrix{T}) where T<:Real - pred = zeros(Float32, size(X, 1), 1) + K = length(model.trees[1].nodes[1].pred) + pred = zeros(Float32, size(X, 1), K) for tree in model.trees predict_gpu!(pred, tree, X) end @@ -37,7 +38,6 @@ function predict_gpu(model::GBTree_gpu, X::AbstractMatrix{T}) where T<:Real elseif typeof(model.params.loss) == Poisson @. pred = exp(pred) elseif typeof(model.params.loss) == Gaussian - pred = transpose(reshape(pred, 2, :)) pred[:,2] = exp.(pred[:,2]) elseif typeof(model.params.loss) == Softmax pred = transpose(reshape(pred, model.K, :)) @@ -53,3 +53,8 @@ end function pred_leaf_gpu(loss::S, node::TrainNode_gpu{T}, params::EvoTypes, δ²) where {S<:GradientRegression,T} - params.η .* node.∑δ ./ (node.∑δ² .+ params.λ .* node.∑𝑤) end + +# prediction in Leaf - GaussianRegression +function pred_leaf_gpu(loss::S, node::TrainNode_gpu{T}, params::EvoTypes, δ²) where {S<:GaussianRegression,T} + - params.η .* node.∑δ ./ (node.∑δ² .+ params.λ .* node.∑𝑤) +end diff --git a/test/GPU_v1.jl b/test/GPU_v1.jl deleted file mode 100644 index c2398e13..00000000 --- a/test/GPU_v1.jl +++ /dev/null @@ -1,146 +0,0 @@ -# using CUDA -using CUDA -# using Flux -# using GeometricFlux - -# CPU -function hist_cpu!(hist, δ, idx) - Threads.@threads for j in 1:size(idx,2) - @inbounds for i in 1:size(idx,1) - hist[idx[i], j] += δ[i,j] - end - end - return -end - -# GPU - naive approach -function kernel!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} - i = threadIdx().x + (blockIdx().x - 1) * blockDim().x - j = threadIdx().y + (blockIdx().y - 1) * blockDim().y - @inbounds if i <= size(id, 1) && j <= size(h, 2) - k = Base._to_linear_index(h, id[i,j], j) - CUDAnative.atomic_add!(pointer(h, k), x[i,j]) - end - return -end - -function hist_gpu!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}; MAX_THREADS=256) where {T<:AbstractFloat} - thread_i = min(MAX_THREADS, size(id, 1)) - thread_j = min(MAX_THREADS ÷ thread_i, size(h, 2)) - threads = (thread_i, thread_j) - blocks = ceil.(Int, (size(id, 1), size(h, 2)) ./ threads) - CuArrays.@cuda blocks=blocks threads=threads kernel!(h, x, id) - return h -end - -nbins = 32 -ncol = 100 -items = Int(1e6) -hist = zeros(Float32, nbins, ncol) -δ = rand(Float32, items, ncol) -idx = rand(1:nbins, items, ncol) - -hist_gpu = CuArray(hist) -δ_gpu = CuArray(δ) -idx_gpu = CuArray(idx) - -@time hist_cpu!(hist, δ, idx) -@CuArrays.time hist_gpu!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=1024) - - - - -# GPU - apply along the features axis -function kernel_y!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} - i = threadIdx().x + (blockIdx().x - 1) * blockDim().x - j = threadIdx().y + (blockIdx().y - 1) * blockDim().y - @inbounds if i <= size(id, 1) && j <= size(h, 2) - k = Base._to_linear_index(h, id[i,j], j) - CUDAnative.atomic_add!(pointer(h, k), x[i,j]) - end - return -end - -# GPU - apply along the features axis - seems not good -# function kernel_y2!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} -# i = threadIdx().x + (blockIdx().x - 1) * blockDim().x -# j = threadIdx().y + (blockIdx().y - 1) * blockDim().y -# @inbounds if i <= size(id, 1) && j <= size(h, 2) -# # k = Base._to_linear_index(h, id[i,j], j) -# h[id[i,j],j] += x[i,j] -# end -# return -# end - -function hist_gpu_y!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}; MAX_THREADS=256) where {T<:AbstractFloat} - thread_j = min(MAX_THREADS, size(id, 2)) - thread_i = min(MAX_THREADS ÷ thread_j, size(h, 1)) - threads = (thread_i, thread_j) - blocks = ceil.(Int, (size(id, 1), size(h, 2)) ./ threads) - CuArrays.@cuda blocks=blocks threads=threads kernel_y!(h, x, id) - return h -end - -# blockdim: (THREADS,1) -@CuArrays.time hist_gpu_y!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=1024) -@CuArrays.time CuArrays.sum(δ_gpu) - - -# GPU - apply along the features axis -function kernel_share_y!(h::CuDeviceArray{T,3}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} - i = threadIdx().x + (blockIdx().x - 1) * blockDim().x - j = threadIdx().y + (blockIdx().y - 1) * blockDim().y - @inbounds if i <= size(id, 1) && j <= size(h, 3) - # k = Base._to_linear_index(h, blockIdx().x, id[i,j], j) # add the blok id index - CUDAnative.atomic_add!(pointer(h, 21), x[i,j]) - # h[1, id[i,j], j] += x[i,j] - end - return -end - -function hist_gpu_share_y!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}; MAX_THREADS=256) where {T<:AbstractFloat} - thread_j = min(MAX_THREADS, size(id, 2)) - thread_i = min(MAX_THREADS ÷ thread_j, size(h, 1)) - threads = (thread_i, thread_j) - blocks = ceil.(Int, (size(id, 1), size(h, 2)) ./ threads) - shared_h = CUDAnative.@cuStaticSharedMem(Float32, (blocks[1], 32, 100)) - CuArrays.@cuda blocks=blocks threads=threads kernel_share_y!(shared_h, x, id) # build on shared_mem - return shared_h -end - -@CuArrays.time hist_gpu_share_y!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=1024) -x1, x2 = hist_gpu_share_y!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=1024) - -function test(h) - t = zero(eltype(h)) - for i in eachindex(h) - t += i - end - return t -end -test(hist_gpu) - - - -# GPU - 2-step approach -function kernel_1!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} - i = threadIdx().x + (blockIdx().x - 1) * blockDim().x - j = blockIdx().y - @inbounds if i <= size(id, 1) && j <= size(h, 2) - k = Base._to_linear_index(h, id[i,j], j) - CUDAnative.atomic_add!(pointer(h, k), x[i,j]) - end - return -end - -function hist_gpu!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}; MAX_THREADS=256) where {T<:AbstractFloat} - threads = min(MAX_THREADS, size(id, 1)) - blocks = ceil(Int, size(id, 1) ./ threads), size(h, 2) - println("threads: ", threads) - println("blocks: ", blocks) - CuArrays.@cuda blocks=blocks threads=threads kernel_1!(h, x, id) - return h -end - -# blockdim: (THREADS,1) -@CuArrays.time hist_gpu!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=256) diff --git a/test/gpu_base.jl b/test/gpu_base.jl index 12a9c769..3fe66b97 100644 --- a/test/gpu_base.jl +++ b/test/gpu_base.jl @@ -1,5 +1,7 @@ using Statistics using StatsBase: sample +using Distributions +using Random using CUDA using Revise using EvoTrees @@ -7,16 +9,13 @@ using EvoTrees: sigmoid, logit using Plots # prepare a dataset +Random.seed!(123) features = rand(10_000) .* 5 X = reshape(features, (size(features)[1], 1)) Y = sin.(features) .* 0.5 .+ 0.5 Y = logit(Y) + randn(size(Y)) Y = sigmoid(Y) 𝑖 = collect(1:size(X,1)) -seed = 123 - -# linear curve -# Y = 0.2 .* X + randn(size(Y)) ./ 10 # train-eval split 𝑖_sample = sample(𝑖, size(𝑖, 1), replace = false) @@ -27,77 +26,49 @@ train_size = 0.8 X_train, X_eval = X[𝑖_train, :], X[𝑖_eval, :] Y_train, Y_eval = Y[𝑖_train], Y[𝑖_eval] +################################ # linear +################################ params1 = EvoTreeRegressor( loss=:linear, metric=:none, - nrounds=100, nbins=100, - λ = 0.2, γ=0.1, η=0.05, + nrounds=200, nbins = 64, + λ = 0.5, γ=0.1, η=0.1, max_depth = 6, min_weight = 1.0, - rowsample=0.5, colsample=1.0, seed = seed) - -@time model, cache = EvoTrees.init_evotree_gpu(params1, X_train, Y_train); -@time EvoTrees.grow_evotree_gpu!(model, cache); -model = EvoTrees.fit_evotree_gpu(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) + rowsample=0.5, colsample=1.0) -pred_train_linear = EvoTrees.predict_gpu(model, X_train) -pred_train_linear = reshape(pred_train_linear, :) -mean(pred_train_linear) +@time model = EvoTrees.fit_evotree_gpu(params1, X_train, Y_train); +@time pred_train_linear = EvoTrees.predict_gpu(model, X_train) x_perm = sortperm(X_train[:,1]) -plot(X_train, Y_train, ms = 1, mcolor = "gray", mscolor = "lightgray", background_color = RGB(1, 1, 1), seriestype=:scatter, xaxis = ("feature"), yaxis = ("target"), legend = true, label = "") +plot(X_train, Y_train, msize = 1, mcolor = "gray", mswidth=0, background_color = RGB(1, 1, 1), seriestype=:scatter, xaxis = ("feature"), yaxis = ("target"), legend = true, label = "") plot!(X_train[:,1][x_perm], pred_train_linear[x_perm], color = "navy", linewidth = 1.5, label = "Linear") +# savefig("figures/regression_sinus_gpu.png") -p1 = EvoTrees.predict(model, X_eval) -mean(abs.(p1 - Y_eval)) -# logistic / cross-entropy -params1 = EvoTreeRegressor( - loss=:logistic, metric=:logloss, - nrounds=100, - λ = 0.5, γ=0.1, η=0.05, - max_depth = 6, min_weight = 1.0, - rowsample=0.5, colsample=1.0, seed = seed) -model = fit_evotree(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) -pred_train_logistic = predict(model, X_train) +################################ +# Gaussian +################################ +params1 = EvoTreeGaussian(T=Float32, + loss=:gaussian, metric=:none, + nrounds=200, nbins=64, + λ = 1.0, γ=0.1, η=0.1, + max_depth = 5, min_weight = 100.0, + rowsample=0.5, colsample=1.0, rng=123) -# Poisson -params1 = EvoTreeCount( - loss=:poisson, metric=:poisson, - nrounds=100, - λ = 0.5, γ=0.1, η=0.05, - max_depth = 6, min_weight = 1.0, - rowsample=0.5, colsample=1.0, seed = seed) -model = fit_evotree(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) -pred_train_poisson = predict(model, X_train) +@time model = EvoTrees.fit_evotree_gpu(params1, X_train, Y_train); +@time pred_train_gauss = EvoTrees.predict_gpu(model, X_train) -# L1 -params1 = EvoTreeRegressor( - loss=:L1, α=0.5, metric=:mae, - nrounds=100, nbins=100, - λ = 0.5, γ=0.0, η=0.05, - max_depth = 6, min_weight = 1.0, - rowsample=0.5, colsample=1.0, seed = seed) -model = fit_evotree(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) -pred_train_L1 = predict(model, X_train) - -# Quantiles -params1 = EvoTreeRegressor( - loss=:quantile, α=0.5, metric = :quantile, - nrounds=100, nbins=100, - λ = 0.5, γ=0.0, η=0.05, - max_depth = 6, min_weight = 1.0, - rowsample=0.5, colsample=1.0, seed = seed) -model = fit_evotree(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) -pred_train_poisson = predict(model, X_train) +pred_gauss = [Distributions.Normal(pred_train_gauss[i,1], pred_train_gauss[i,2]) for i in 1:size(pred_train_gauss,1)] +pred_q80 = quantile.(pred_gauss, 0.8) +pred_q20 = quantile.(pred_gauss, 0.2) -# Gaussian -params1 = EvoTreeGaussian( - loss=:gaussian, α=0.5, metric = :gaussian, - nrounds=100, nbins=100, - λ = 0.0, γ=0.0, η=0.05, - max_depth = 6, min_weight = 10.0, - rowsample=0.5, colsample=1.0, seed = seed) -model = fit_evotree(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) -pred_train_gaussian = predict(model, X_train) +mean(Y_train .< pred_q80) +mean(Y_train .< pred_q20) -features_gain = importance(model, 1:1) +x_perm = sortperm(X_train[:,1]) +plot(X_train[:, 1], Y_train, ms = 1, mcolor = "gray", mswidth=0, background_color = RGB(1, 1, 1), seriestype=:scatter, xaxis = ("feature"), yaxis = ("target"), legend = true, label = "") +plot!(X_train[:,1][x_perm], pred_train_gauss[x_perm, 1], color = "navy", linewidth = 1.5, label = "mu") +plot!(X_train[:,1][x_perm], pred_train_gauss[x_perm, 2], color = "darkred", linewidth = 1.5, label = "sigma") +plot!(X_train[:,1][x_perm], pred_q20[x_perm, 1], color = "green", linewidth = 1.5, label = "q20") +plot!(X_train[:,1][x_perm], pred_q80[x_perm, 1], color = "green", linewidth = 1.5, label = "q80") +# savefig("figures/gaussian_sinus_gpu.png") From d82d072d670b3b73187c6f6042b87451a07f36e7 Mon Sep 17 00:00:00 2001 From: "jeremie.db" Date: Mon, 10 Aug 2020 00:55:40 -0400 Subject: [PATCH 23/29] up --- anim_fps1.gif | Bin 338354 -> 0 bytes regression_gaussian_v1.png | Bin 41478 -> 0 bytes tree1.png | Bin 50006 -> 0 bytes tree1.svg | 534 ------------------------------------- 4 files changed, 534 deletions(-) delete mode 100644 anim_fps1.gif delete mode 100644 regression_gaussian_v1.png delete mode 100644 tree1.png delete mode 100644 tree1.svg diff --git a/anim_fps1.gif b/anim_fps1.gif deleted file mode 100644 index a24ba27fedc4cfdaf3d408e8e0d4c83b86a8ced6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 338354 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

um(&yvy$X(MMPzek5Oe#W=fTa z&Nt$ANys3>)e&&30fTn%Pv-=*--;C~2P({SKZOH@5+0!YYun1M{FjA(hVHo(Pyd`H zJ~_7@JrMuqTSs)qk3Z{Ho{$E97u9LUZ?Db{SSBVXJ2qGl{x_yueJ3Xqy+adX;CR-} zpD&$11DurYZu=_(t&n9sL zj9JqZP6Gb!(X({A#{5i)-e7KbsiMV1D$=Y0H5t_S;P0C3|ht7 zeV(%v=d0q;>1K+INOgle0gG_)?sSaBo+3+PvPIvNc{&R0M`j4evEFGgd~6u-3>GmW zwX!htunKDpO)pKM*>#F~#eze}71jpQ?0;vl|Y;Sbx ztHDEQW4A0Sueb#Z0Zej((O1MZS@js=9z{ldt1b%yCT`Fcrs&@mObw=hW?uWOhWc_e zK~BR;)ZkjPD!K~}T-#GenU|?QB3kGTDZ79O_PS<|V@9G)sZ-Dc#jK*Ar5jE>8n1hl znr2-~I{lD@814JJPzPG;r;b7FhQJr61RuBU`A{q*wF(yA$|m2Dg?U@22M_!$%mO>J z102h}R@DnPQ;WP=^IwG?>wCR2Q@%B^-C(%(MEa09b`sU(?jm zePf-cBXPK8AAJTV*x9wR?yI@!Uk==&=mgVM9|FkfDHL1d`y==mHhudao zLHP}U*f}Bj7^>rr;66+1ZaK`;5nlV|fLFC*zduyzPDOOGA$zBaiOF*)Jj(N>J)uMD z_f`^9Xtx)gXzC2J4M14hks!g+xv`q1&brH78ljc8#?z6r1r9c0u7@y{7SywCo?;bQ zCPV0>5IUY>Z&nLj^Uvn@>9X=<3{%kz79dr8gjvsKQg>{*qZ2D+8Wkd~>cvtPu6tJn zta3>apE~UgNh05QrXl7mAY>D3%35Wn%BaxCQdM`EiJirlc<9h7%+nim{&pFm zYLb7}5&Zcuk7|g?ikPB@ zUS=(D9Ve(Z3{np#iOY1O zq-HGN=GRXF&k3NdJEaP-tcWV0qq-4oL)^R-7+09Zm!Z42((NIN?yjuMo!lo}x>;eS z;2VYGD!m#I zs|KA5tKbCndy$@AO@F{=pBUn>pwj}N5Q-3KgLeD?B#u*d`sQ94r`$1Hjqsa@?d7Rf z(TQv>vnYi|!0jh`=6?$Ye~qO5+GVCbut~(h0v%Y6J5R??)fqYI+oXYZqsD2SIsBBx ziFz9#W^In%3bbnlP8@keMKL`Gg=C2k!vsj9Kkf7E{mQ=n)=xLvdQboIoDn%U!-_eP z7X0e3=f0NSY#Rx1*chW*{VkPJ_WEmyZmD|VeAS90*l`08X#_DJvbaE|FOzBCY#|{6 zx>`SN9a|C3cKg#enN`X{5%c+LBeV5YS@prZ$Yf9mndjuWw-9%G4yTi-uA4Z>3>N?k z8n7;{mFO!T4&j1AJCB?1FfY%eBd~Y8=ZlY`U)gbRxmu7{a#c#x*26`RFELs8!kN4y zlhi?`7bVqu9vn9H*35HE{W271lNx}3o5!WoybPPy7S|=UDvm-cRhRg=JEy@SXZ{;f zaI4T6^imSnySpyCr*MfgsOF5Bb)mV3ja5+(v!YiY2w99^8_rO1u#02kI$PE3G{!sD zp~7T_v*PUavbULs51?K$LLnvb92q8t!5X1?u7a#v0g-#b240%3w*VA!dS2dK$GuT1 zhk>CMu252A=HO=rU(Me@_X>+YE`REz_zp8o%q5Anj9M2`tIlrjW zPD`n2zCwZWzfb%mgIMMLbhn91IB=9FG9JQ=hzZgy*XGmJ!6EahX|&nR93^${Yj%Uc zok6hD7Wh~^%jDZt|756_5yU}_wf-PAU<|axW=>;4g>p=duk1B4K*k{JG#a$}&LHoh z1J(11oGnvQIkkvf`L?*@Ytw1;S#X{oZTysowruLF8ixma0uS&AM$W zk$g+ixe8C!hwSe&r3=(lLFBdaR;%41!*xZpdGM64D_vdQ5Z4g3YDdz7kRZU-rH`p& zDu+biNls^J!Qko~#netl%8+Y)tG1uIA^(j!>qE)A`!t5F5Qu_?#0OuwVhld3zC6=P z^MQb^aqPQmU~VHbnpLnyDP|n$m?-^N9g+G8%ZT=@zclzVwT@L)GZ|tlSGa*LUaNZO zsOvL5$ns>k2MZHemJ?<>SmqMp_!(JMO zeI!Ui=d(dGh)~#EXNu@j`&ttI-V*~zN7378G4KV-Q&!=4Q|979_=In(*NGi)0{P6k z3*-bO)op&gB~^&S6OQ5txJC^Scw3 zcg2~x{p;8+#@JbP<4y6p4|ROYnlM@nLb91vR!uKtq}hc5X(zHNG5(nHW%@kGqgCj^ zHP+>wOn&i+AVrE$O9_C_0vc|!$drc{Ht6UxzC{QTbJn4^XH#)PG+()3Ncrt7h?0w5 z1p0Xr`7DjQudtAkD)5q;e15^7zKN4Cfyanz8c$BL9&)VAXd^lslnT= zaZz+u)Kh=Sk*sX~S|W3gDl3+S`ndsyon}RIfp(aPJ+!oFo2j(b;mCQN`k_M#f52f^ zzD45L%2%XMVCi3)-u8V`&%E=au(HQ3IpRL`UT!##SR_=qbZhj#PYa}ibQbAV<7D!%{#{_DBR*r5T|EuddzOY?{}i4a!D{VD^4O|x1yH%(jyr~O<|WDI zJB^Av8Q7h+$A;pM`cutW48!;zLwO0wh5itx@gU&QBbGe}C-`*dX&JQ zWYnBm;G^FgCOU#Ij;$rdFg-nQUu*zj!iB4u5V@2z{rwzL6_7_-N!DDUIZDKBeok{# zC!@a82Zgjx#wQAwvjb(@27aHZj?W;|5NPW6X#Ni-f2V-|^EUri3;*{3fA>|=@7n}{ zJ**@_u$Wfx2Bw=XEUjxfSW6@_R=2G}3)yg455)PO&K{e7-Qj5Y6crrA&xjiPbz_eK z+p7nUCWux>hvdn!6S3C-Kf`BRzRavNhpRU@5M8DZzJ23};*7%9$3o8fZm^x3@<3U|>A8&rX-kh_V?&A;G|L!s0 zr!9Gpv5@eIk#O19(z#%(#v%Axz2}^E-Zo+c1temD+c6U*_}P=hqF+ zbvGB3NveF$2?dTqj#xG4B5P>rF2HrO6VpW(YTqXmRoi+H!fN>CM$&M6xW=$G^{^!7qD<$#F`12_7I8))Cs4rm- zOMHT3s8~#xfAQ{Hy|bg;^h~>^Rd*J@x&xL_ru9Z3O#4y&q<#Elny5VA(hsKh)1hYE zoL1Vjz~;(XjjEzkVmZpbW%y!p5jYv$Bv*2E^{(Nw4$Lw2Z=j2eg#ZgT3$Ln5X#xku01KU{WO+8iCxat|8?;y z92+c^i^TS#?i@GSa;1t=FEIj9dVLbK+xVjmgerV>^5B;z@w%46q!E0=;g@jR;=`{_ zJxi^A^*Su%_6B>qZ zze-{G-j|UEf94i!^23vF=p5Tle-1 zV;NN=gYwZBO=+XHX!-NF2;bZ^0+-xtPq!$l3NUQ*Z~KKee%ITN?M$W`=uPJs!|Ef&YtT2y4^bWWj?LRG#Z=QcrMoJ0HvtIns1u*b)LJgmP| z#o(sGM@3`>_3qyX>he;i#8gH;sLXdG znBgmL&BJxXJzA-908ucmdyf_~c~N2t3&9#Rr18UH%kqmTFmU1(%f5EQ5a4g4wTcJl zr8X3HcyV>EdTH=98dbzg?S=N=M205=bQFvRv|MSTjS?!Ni5r0Dzb?s9qLyM49S2+E zyinf*dZX|D9?)g?XGhlhN_KLs)GjPCk2fr+)f8HrIO1~M5S9v$1VCH6Iaoq>3R0Sy z(Tvr7{C?9P^QV&~`&UuTAoNBNOb0X*Ewbz6Y1m#l zoEb0gS2!;6{o=O5#El;L9nMJ7<*zxS5%RJpBJ%CMsr#ViU@dY=kNxF3%2`9&ndYjI0e5Lg+nvzzG`Ws}^$>K_vCA{8)}|TIg8CVc&8QTHb%vkMATc z7!esKVJ|SgZB{rw0eQ}|f(=gd&~i?LhvGR3GxJNBRe}VqlE~#dst44z97^N@3nciEg%Qr4r?@49P@n@kaM*gQ3hw2*DC+I`2Q!&YDd|59`EikjVr+upg;;vYw!sZbxB^e#E>YATq z1;h%cCXo|BSsoPHBeYyv%!$AQbUQ`ChOGBA-P3V zM&0l;^h=(a$@x9(OD5+}Ra6zHzc?IB-?$-}Na@w+CJev$*=ioz`3)aV7`E@+FV`?H zbm(*i^1$YTf?6DZ9|=}o7G(pF{m{xZ{j`vMVR2lvU!YGta5LMEoNe=6aL6Rw_alv+ z1D_ou71o%9(zwy{G(=O^AMaH;1sRq9Zb29{!69Y7j^Z)F=x9K}sI~e{vvE(h!Htwm#Xvvrd29gTiy$oV`%0={dEW*^DXTpUl$z^4 z(L?Hb!lInNaj6Gln7rGafY0)vaK#2i7xOKCmDdO>lH?XUyX+)Q77|IVOLGr5b_{lv zk%tDK@sU?Z8Ijsfzic+QB-otH?@{K_ZI-^zs5yDc%U3Bjy{ZQy(g9NbBYYINHGVza zK3PeAyj4hxH=gyC^~&cdqo-?9C?jq-cEyCsIP&yKcBibjme;#Jb?*hyhrhZtA%2Ai z^_e+$#Vr-?RJX{AeF5RrU)fZ>>tpYXUso{wq`>_z^=K;3!p}TX++5@1m-oo`rW|bQ zAw3$qj}g)%6IZP)TYnB%Ou}Tzg*Ww2FSkiApCZQ{y%z6w+RA$$VeI-s7qa>Aj5*yx zZnjHP(Gj2vgy+4%HvyI@ZwQq=ta3REVD2s%s136`6xyv`_$uKKz*{>PcliY&=30R& zpDN3hlKZcCT&4Sf7VYnjJ0Ur1i0zryuzQ<}C;MnO z_h^k;uyP&twF=?3OJXH~1{C|wZNRdl1;)*yqprI{64;}a1{-qJh?6i+<{#I-*S9Gr zB)?mx>?k-@H2k<0>b5MX!Lc~94KT_D7zEQ?Opnt|vZu8@6mXSDA7EA)K%>@zH9M&~ zOFXpQJu4}HGFeJij&4pN%Ivi;-=ICc&p5O?i(f{(k$~Q;BNu20I|y2v;Q@!a3s3xQ z<0w5A>8B4Eh#!!;=~;Ip?!GUvUFl>g^5m@bpYhZ>M_Os!^7gnDbg!qyZmDo)uG%(? zKmdqkVqBGgXUl1|0z^ZHe2*rYTKka6_YwmxK%GOa4j}rtTFhAuyS3We0f!s1K zRM#fBV+paMI4P(=4-3$ATK8HUfV-Jwi+t`?MOm7R$;kSTn9uX!Sz)dijyTDiYHmqv zgZIYP+8b?K=rm0RHTbIwl*>ac9~hP4r+PIU{bpfs3yhdKHvKu7Xck4pNhoKIIp(0` zZr)^O3@SOxsK!{`KCl=FwgBG#G#&n_CkCZTT%9)>w~D-n*gKwjE<)8}mMXhJP_VQ) zKAYP=rD%~%)VJ(0QL{8?AS|MQKW5z|sxvMKlDu#B@D+QFHY^n3RO?s4O!xgu%*Xopkb6wq?YuE6Jpw(1{|ZM;hHyM&ft&wtn5E&Q_|_O|dyH6i zw#RHX^@spb2S>&JtOPE4CdN4$)4Mgi!6&`h(lUJDp+RR{rIWgY-H_JGlVuCjn{*gq z|3#Szr@(3*jet0vo0h@*Czk;;pMnT@A_h&(d8$;!*)L1?bK8auZW6auXgVCRQl(x~ z37>tF;#^iwF-u5Ur^oK*HB%Mk(0!IVmWtXc0R1S45#<#gMl>xW<_h*>b_mvUJxT^j zeM1bwA8ldEL)(2Lec>C2%@46wP!|64@-3H&m%bY9O&(SP?^KIh$68=9%PAV z^Ri{-tWK=LEf93z!P7c)MdFT!x{3v6L$LoRwab5~BvhgW0mQYA|K1k-n;I&&k)k#& zBx|EdnD_ZDYHf&rx=2t;QVhK;R?@H)1nLAJEvQxIc>msct^7R0KNSJJTgbF zDldr0>U;eDeNV2M%{I{}w+AH;oKrzO-P>!1g>@?doq983`ZA8D6SXQWwD2@7gyQ?I zj~e5G+LU*-Z5GFh7tMnCG=pTCDNE>(0CABp_-*^ds4(5Yf9X%MWuq7|UqFgLUO1z5 zLTl`eIi99Qr`}%7yfD|(KeK$nr+3m~*j=sHtkU^7mUa-%$}f8p(p%Fq*O@>l1>m59`6UdJ*)`?TErR4*+qT=e_d1qm-WaO7zoNeFQAbZJA~| zON(V2d8lYFTFtsKEKaQeiJ{DXgKF`NPOUgD8TBBfaDuolQ*$3n+*=75TYl1dL@ zL%iG{sW3*kk#Bj3+$$nYH{-s)t=b!IMf})+6iM3r0kIHX#;ZrH~5ta`#3Qz4Bx zn|lIIQ7ywMH0y>bR&1W-=r9$Cl-#(Te$V+L50<}V~;&%iU z9Boy-`P6>&RLys5?+vOm_ksnBi1CKy?aGkG&T7?0zS*5ut+ZH~ijc!QSvVfLcxRSS z1#oFVE6mrsqk}qnYoCuD9YWAgb8@W1`pML#@4`k7S4^wsS%N;84rkCC+vf}wb;eEHZ%$sP{r50KZXwo-k%D99A_SBz)mZHA&Jsk(kx$enj zFp+QIuY2i7l6jgifa7GHhLod`A^ppV+|vZ9Dyd#;^U%W0PfEj%p==S=QGmw=5h~CB zZeB$@##uJ^RNj_)Z$$6GEmNv)z9f_iy7*LE#E`sqEPMnGzt|)k+Vaw+^^&YEx}CQ+ z_;Kl$_kGWR`}{)TUt}^5*ZXQFV z16qJ$6Yl|fo-EnU>!&u?PTP!pTUI-G0{(_<$xwacTqB)8>Iu^WMjj0_H+e?3qRAeW z)2khtg%jl@uvQHOvFa+t_C_6VYGd+^gv;NRk645{5|vc;-K}&PI@PV_x)6Cbhh~xa42t5?e zhV79AtnKTXy(s0ZZdsFDP&=4$>G;b%d`2w>M}i0)HbLriiu(a!#7`b!`7q^O0B79L zBF6DSv7x@Fi~;^>@n6IAyxykOay*@A7zMzW3GUm|6Pja^ zu#Iib$K=pq4oRq-5;{2(rI89rb1Et&Nh-D9zQ4a}fx*qyUF zbjOJgtMKulIVoS|`!>SXntZ+>HbtLlbp-ncYhTl}&0F=3`oge6T$QX^au?S-altOI z+tAvw*Ggx^%7{K}*36D}IbUg4{LV6zB2rpxBV(=0^cC6_vUFMhzDa3NV~vXN7!~9{ zW+vH(SpS_ik{!8gR+{$kh#=QT<%CZDu(7l=1N~!ClWm%wx74OePvp5C$<`}6#Pz;< z0UR-Fv#yb{*1<~O;ZL%j$EQnKb8jW?IP+WC&ufI@yF{!|SBG!8;rld4%-5|RVD#%Q z#HoLw)L-6S>=;32|G zQW@1A2^u=K*XBE*B>_0M>8O7zCWLDe4$#c9O1hqJ#2xE^q(U%{U&Af@hFh=GkcyHH}VAkwa7O9KQqTEqC$#-+hF`BJ*!bG@a@_X`zpRB@9s<%yJi z$0o0nB_{!8n|rsk1hr3gR*8Jo%}=3$WdGv{`LS-$aZ3O6TV~zV*$(&P@qF7qLe~IQ zx*$alQojAHTU@X z;N|Z-*K|&e@Rfb4Za!t2{4-eQWA$wX%Zz_$AEAnghC%GH=LX_xFHiSgEwXl$o%4KS zm+_=>JFFR+aPIqunX}f9uU~P~sFJE+F;p9AXUE$^YCIw>jNbigM&CT9+1_7=WX=apiI9}zb z_29Wvp-x>sEa^QCed%f(uC+eJ)hYJwK-%hB8KX=j6nbZW>&flRFS=v!Z$PUXmlMYN zCyKAmnV?~tGPAMvvTILNq(W?Gv+oyg=60cWAAO$loS6ILHRo<;nmf0|$X@@79*++Tqq+L{ww$?YiKW!wAI3&CeUxngj3?`i7g(+d77R@#Tfq z?5G=6!R^1sef&TPIl5%4Er-c4pAN0ss|CtTAB%q{D?r?(jonDpDbfbmLdSXijVHGu zP`sbT4r`Xuf5~}5o^E@xd(DYwg(4MRBCK}N3%!vCvOx5GzGnVO5r}x4KvI!9kcl3L zhxd1g&QRJ2RB2zfpxSs?!NPh4X`y#RDbwSLb@>fWKk?0oK>hlyO10pgploB1@5h_M zLKi=_UN@9DUFIPX<-OO)Uw{-lb8GWmqLrYH6e-T3y*|cz>4m!?7FPlayB4#LOx~<- z6(#rF-$!;1YHvCl%E;2i6N{CJ69N5o6!4w*{lmq^yYzc%kv^rb0?FMDZ>l`g>b+!# z?x}hsVkAR(4X9PW+N!cSS!qeE-RxNDz+a-CN6Xy$~(7 zCi-%4fgla(CqQU?b6#8N;l$OvU(E_P59vAeP4hwhs0%vOuopQV#ca>kjXVEY+}eKK z{Hf%T#qq!nKtle>r({d9Tz;(}cPzQP5cGgPrh-MOWFO!)cpLx8v^}hma$L!?tvehrB$EJ{dv1OY$**4WzKZg8n`jXNc;6d*I=k9k&d3?EeGT;EX~x- zu*956fOgnl?wt=}WDbyR{~!Uu8+*FPQ73vP=!o#^ep&*0V@W zOSwbf_AnX`^}Fd{~O!kpbZScn2=OGh;b;1AUY zGqZSQUZKlvc4t6DzTE~*ZVlN7>Lm#xA#gC|?PP({#cWt3oWYf2JvT4bU|X(pdw$$( z8P}7_C5T$d0`Bn57R9fR=CfD=#_xX@C&6=C;UodwB<`Y^wwPOhzHzhFQmG$NBlV|# zXyNsLpPUgLX}Aj7vbF6m^XONT6FIFF+KiH@mdsY@@GZsC`Ja*bI)Xk7*v2ey(O$Q& z$VY00=mV|5LCQzszb}lSuP)9Iv)APLIw}Hn$e@%$!?1-NhD~K%en9A&66RTxSKFo1 zvn9NUm8j~shVCN0{~EMoSgp1Lq{3XGksDOJm_wNX8)iG{B-fp1e};G%k=!p+hfTxL%=J%5QCXA|LS@CNJ64uc zSvfk>gT+?|NYWXrb~-xof=8OxET@bSc>-4U*PKTb9+`Z@rBd(b0-Nn6EPz+I%u2n@ z&vr@9+&TBB)Z9Wj9{B(`su5VL-ybmKJLO9S^OKK;C`&5M6GydKLN7ixZ9Y~qx!fs} z@YcOI*%WoY2&y?7BnNms3BOKkFiBe}4mVbk1?T=m=YToWLj-EUPDKZncf5}b$(R?e z{7XP&Fuo{=@Wp(JOM}{a3@bd`v`M^KO*dwX)F<0pxE;?Jf@b(eXoyKu{ka`WiEd=k z_mn*>_|gUynfpLO-BwAX!_JU1($__$d=(IVe$HUM^;i@i+7|XGpNK*9S<}lX4+V7= zZr~Zcd?78&+o^#F|$xC=u4&C79>EjTOpx)j9XyIWuzO)C>hEMBhS8E)YFe%5CmVXas%kMEx-YIE-#QiD9>&d*fM!-h@kSUT6h*h^DH-nO! zm2`g&gs(zo7ZO!@#+;uAk7_G86rAx|lUnJ;9_Yd&JgsF1xW+uK4nn6_5qhnA!?O_4 zmznbm5^w&DoBaE6@%$3S=OdRS7fccK-$C$A0cn~9%`Cu@X|m6{A9#Fe=UzTqnpv$N z_$~c3b5F=RkoYRe-4)nzOIIZD4Pmbtxo^m1$X$#k07@eYg)q>fzRFm%ng< ze+P+Kk;LD(DONbY&A2s>S$!^~D90el%sTVD8$6O^ADDez;g!&Z2S@x(o5`v?Y4eO4 z4Z^kgfslVBPKs4bv_X!+EfaKSR1_uAm8~FLOEEO*AJWpso`< z6u(&rAAmH5HgQ|lcXbo|ZQFS^Xgun=89F=ldhLpaZVIMQC5v`s0g4#&)v3UVpN&hM z=jsDm$t?%>450p2XuTq~4!4i`>;|9TiE~V=uc0?yo*?~7D{=CTm!II4#iBSy&!qBb zo6jfFg%&kE0+cPf^31f^t-A!-Hu!9UdoB_t;vg*B&Fyb>1F}qp1(OiBKj|fLiz6b0 z_=nCfkx`AP-rqGPJ>P#(`9vWyg?ScXa(gz0cg9M#C~-ck_R6+9oTd`U&7 z;`0Vj@d#_uCnoGXk6OtHQ)0GG);dm=je;AIa~0c_v7Z-4a8i@eidVN>pFD?eYq6s3C(zg{JwJd(YS=)jyz^|j?${e6W^8Gmbc1q9CknN*9m2zi%GihTU z%gw$Xu6X*19r~l9!>FR*(bG%Mx&y4dH?TC8IwE3Li|%C`0}xDC`f~22c68@v0kG{cCej zX-36j%kBroD)ypcy*ju``7#Eqw5IFMELm*|)c1s==0CreoJPrIyGrn)pqs4s9=WB; zd;+;>ggr`32Xz!u&wO7Nus0&*1v_%ST`d>~KgN$?*GXLdis2r^{Qd5wCt7ZpplBRb ztZ~LGtNfVUy7nekC3Vnem4(pb79UGM)|U&iak9uE?7`8hy-4^FU7Ai+2pEL0LvuV1 zM?p<)_fv*7(~l~plJxd@vKL9F>Z^$KI{4;`N%E}XW*s6GB^`p2zWR~L`hYh=TU`%! zaMWG@!jc~%NXn2zM^qpJBvC3(feCbIT$T5W6u;e~`05A_L{^v}A)wL7mRwK*O1^B! zTrF5(6=&{!Ty=j%+=CkS+gvTASh^&NT3kUeS5$n_wUtUPQY%mW>LaXbJ zb@sCaO5rq0nlT7f9}>eiDaPc9ayk*5O|XN;FQU&q5Oz&IC^0sgaA$e&eBPkfQFRbWrC`|A*Q!5&Y<#WLhYR1lABBe(4DI$4>zJS?}7o>kDBVNcn5L(NtB2^4G> z32s#J7F?CLC5R6>$flCuOe;jFt>+0JmkG4bjmhLRtCQM_@HJAR>$*ZE4j^YMcZh^e z97kp+A4l{22Y=}b8uEw<>**{lV6ni5+1l7Tg?)z;xHAV-?y6~MPRwXJlN-^ElKV_5 zoF7TXD9TZbC5-C%w{fn&>eYS^I4;)*dMlpU@fK&F5B`t$yV6K(kcs0IRWijBhWsf}qjC8izmIsT;&^v>9xLZeCvA`ubyLqUHKhES7gCUj+i5ylshm|KM< z%}JpK5>|s!bJlWxI6q>gVjBVUC+Jezt7`%Vn!zpM-FcjwBG0}-abU0qUV+(qiKOH3 zA_R#NE!q4PaC67yPVS~voSXq_1XwTiJ4io$@LD7{!s1>fodoCd5l2nPyrL-h)eQrK zy~{_O9w|xZb;-s|#p?38YrbUcx3vOWGr&^uU)6MVV{{+dDo{^9-$yGzh9s7)1QSuQ zhxd+IeZc{E#Dk(-TwdCXkYm!U^x1@D_UUlx`Z_stS7eKWgyn|-!6CR`odlgKRrX;G zO#T$UD_(M1^0z1Qs!dagvL0w&QHBILzy``HN+JkiS-8MMQHON{n4@;0Fxizj|EYis z5M0IQ5)}4G%OZ*j&D^p! zVS(wS1Ys*T1tm$5i*!mdXY+^)U?peE4fvD~LK85SbAeTn@Faq`&tU$cx}<>pg#+7I z-H}^yj!)uNY_E5oX;Mc7zA}6jwYx>pMFbu zT(6^=(Fx?h;EC7z_dfa{6Ku-v;$*T&jD#wuvO$U9mDViv%bPgF zBue*aK1{T(f79sNw6IEgIdW2IE(&?uNtQXtV2Q|bivD}r z#L7+-9Ou(riM$$B4XZ~Oy2xQ}s7+s*Z#$XZqmmD+mvw%xyg`9a7s%@PDjyC$J1}ZA zP`q5%Z$4p?`Lqvdn8f(hqvcOSvk=S7C(m!3Am$TioG$m-+7wDuM1w~;&%^n*dh(!J<;Uu1y3SeAPH zp#ut1|7d@uT6C~y$J1{%vgH(EPy#J09eip&>**|^A0x3?MvKVXN4{EkaPUL4#!f@S z9Ja3_&u;RP`fPjpPi^P-3B`n|BO4(IuX6ZwZg1FX@9T9@eZroVU(2O8Wfo>@;#HZA zzntGjSG!9bo2!#03b5cK&_y1yG&y5!;QWNYk`Lj!yN3LPkW9wDc#EqOnwO?o3$tH2 z1q+r(ppNLR5Jl~ta6LeMECsP3O@dA1kfA~TV1-_fnBOR^^&W}w6~rc~luD424X*g8 znLJ2JU8;xpZS-+f2L3#Lg0cNoDEKeq0jirM83$16CqPA3`VE4M6^EWp*7b@-V?0(A z>9@WzYR0$CRazD^E}uslmhj?jAI?xBJ|B%;*L?vQl9#E2y&r+;t=!Zl=f3)>aJco5 zt*uzEtyuAEKxTj&(WCN^L28?>Qv6c4m|u+2_#;UrNDtf}|8|(_6>{~6l^+set!X72 z^Xb}Ml8;c~m4`H_AUSn;rJ4wZyR{esf8Sk#f@|9&*q~f{o}njaYG-&;PhA+lX!dIS z*SN`%38Sb9;nhesPNC(3=u}9+_jb6~H*olh<$UA|rmU*;jkUDkh3|_CnnQOqO~VFm z%jS{B&U&v-DT!bGr1Jdl<$^fHv>zt~V^T5lN{e+l!F4@pFg3Yi`9lKY>FT3jKg1k{ z;+`T_i&Ho1eXt3B_36ed(!nO6UO^=9-m_sTGzzML5@!!_ zH_d+S;O9Yf$b>F1jE|5NhN`B0tEGGMq}_Z;`=qpb9P-4N;sIytnHB-mvqcR{O+Q`x zfRZ+NWBE%SHU0M5`fp8)u;*xkI9droy>rE3H3ByXUoL5dS*>{nOQU(;%aRLhSJLf* zYmHFgFF}u(7An(^4lJ#* z$-Lc;l1!@mj9+baoN=E!=FWc^#gRPu~_o1MEGqVoxWX*)t4}XJ zNV;aothgyheLGTHA&HL)4QGPT+-`_SYOkn>z6Xn^;ssrEW)2JOxU+5$a zH@TPNHlk>^7cZY+J){q*Q~f1f9OPDP+!SPTl`9ONVqS<@F|lH7-*ci?FI^0mKJ!Z3 zEONb`)Rx(rEzzyd_4yB%5t-zQkLajd#_qMFuGsRHl`Gno!w@8%j?U2c5)DGx|pX5)Q{;Wz1u zDV0lEN5xI_<@vyvv26T|hKvMWjKr&w&}4J?K&;rwU_*3L!;bu<+2-$FIn8!E)EH`z z>oKfK2$N_8Id`>r2%=ME_|UR-OwnSTW)IrUa%E&gxk9Z}|?Q9_H^^M>ly!G0AV+lTvk8o#|fK{Y-y3Iina^{oQs(9$D? zvT+l3ngzq{E3~ABrNrZBcuK#wy4~Cvq&?%S5 z$o(YN7cSh0kZr7>fDFa_`JROegf+~l2wc$vDxL5YUo%N!;%c$|kzRsR?CwMdRfH~H zNPX6@TT1rPj+2-n<~QvtcSSzh+8;v#Y~92D9ygUq)=oRH z%F)jFWpyz&10VURaewjR4G%?^x%pFWM(1SLfsXfp38hGjik$jAnFzinaa-X5Cue7CQ^fxy2H8b%*DLEN zknFEh(rkg~2iiesCAVQyLEdOE+I(l>%sGB;JFQo%hPCTTQV%xY9k*^g)=c~=|A006 z!-76~MPDmFpi%I5KU}^kHP?KJdtB8j-X@Q|!z=gE-WwOWV(#;DMB%V`&GL|BN8srV2zj|NH~_4eTi?2W~;83_h-XecFK25b+ZIuV%R8masHGkV74fr zy<9{2jh(qERqX8FZ3Sv5{wSwo_A;PMb!jcquw%;$lhKjCJR)d(^F?9H&5(>3Ew&#;hoCIS9XY*{zzBP0Kaj)#dMc1IN`H*qY<(SBsdO6k|6gXb|}+h!}N ze9w(w?=uPBBVKXRQS3rnG>B~dQ0Odlb~q+duI!=D;jl?e>gns*Q+<@BVQ3v}{E2c^ z0EvND;;>-)oP21&|E6(SFV_#;ixL`@q&f^#b*hnDnAhT$E;k z<7-+%M*({Ma7p(o0=&{i4WGx3i-H z(7N+Z+gy!zGlQQOSm%LeW`Q;o(P9Ez3A1l+aMkBV0;&DA%*5pIl#hir*x3 zA%CaV6>X^15a^WRpRB~2_A`avM(dJidxvY;gP@TW6@?jikp4hR>GZ!fqI$8TnMWV- z#0d4iCk(Nt)a$hG1n2Xl7*)eZVvzXbck=rwE4V2^BtqHl16HttDfD;XJl9Xi{b8tKo%t@eLf=`~ z^)fRiCUM&c`T--zJnm0O1#huZx{*+6cT@fj$aI6zI+w^O7X_>&S7Q%LXPkKKEnja8 z{fG2w0;*m|mn@5>H8ti*4CXDw3+7@46|2NWy(kasVM!QZt{dS$1H~uy&;(yUo>GyE ztfLCmVpCi}T= zEGC`_pp*zsxy1lr9xiJ#Q$~<4db*2TM=Q7roKA|QV>n9ex#;YRQXQcN@xq0DS&pF> zwY+LFPs;lX)_Sa7T;Z(*qbk`%juk5iql>F~R^m&A-4X@6kmc+W2#W)mVhFLnAgPs= zeBZz$T*BQ@5U&dD>^VE_>me+r@F?rDTjQm_Oz@f;c)?B__Tf@jRG_;u{3#Z+9wgGu z6vl5rR*_(E4ycGIxTp@rBvxUQW8-eX&OzDvEfSD@tgWy(ppYTB1O+{Sf;@gf=Ethp z^lN=DK-WT~wn~H_vI4;~kZxBOb*3a0)N_?t2o;m}5 zxq3NM5JYJ>sYpTd;-Np?8071)PbSdCf!t(eMn{VM*&WE~c-*6E2xnmwll1iz;|Or^ zY^+G3o8S!6JOvdOcu8)6CDez300vL^OxAEXB3;Lup<c332vy zh_kdaGNfW26pgtFoq@uZm~7bnH9H83QK5EIu@d4)k=i4P{l)qxj0<0g*>6;bsCzrmp$bHmz&QZ>hJ52H*VQC#TMlLAZz=Vg}|LhE;gJoXV z?k_=z{F`&faD|XVP_G*h8FRCF&O zfMG(yvLL~TE}~hRT)AM?K739$vF)zVFj4E@EI^%5H~wCIA#t_IS=~=WrJ6C zny=wUl!9}3;&Cb~5b#;ge_X;H?S1_56jQ&R>GB8H8ghRTh3iUywM@$ytc3V)v8^od zR{MZ>$0aEauIvN-i+R?tIQIMvh^tmgz!@efA)K5p<|f@S_7W^6FyUr>Bw+&h78!Wo zNvu)@YU1A$*JJ;!LugaCMm+u@JGI8Bv`4B`82nmsWgyrlYEr^|5^}+!x<9VA#xMmT zKJTWzjuTWH7Pxx|={$t!DMRrd%I$kM4RM0&Xw=LlnQgZV{PE9B36Xi~Gqcs8w;0{^ zg1~cK>5tUJU+o}$R)kJU`sbR0-?l40CF<=j!MkRO< zqkVuGh~|r|!&E!|Q(}KH;3c;RrkjCO`U`v5%$aSm=FbK#ZU4dLBrI)|6{hYc%t|W% zg{Z!Tz8#S0VEWRRpeHYh{|t)4ZbNl$1&3^OT9^7JxIjY}HR2KS@K(e>L5bKgfk;vC zEtc}RAmHSn2#=(2>NZq&*JSV`^!n~g0n+&bCeVDZSh+>)yfGBN1nWC3k{-Jt4tqU( zK`iN(ZpvRsTS20_3+&&{WWy?l9p=1x)C|5XCntbEK$#}oLKqeE|2_$~VuXb+0pYEU zx#I#ld41O3z;Ltf;liBizZIHYkP1L{!-Pv0?b*-`q+EOnuwg)0t;M>A zSmbF3mnnT9H3*8QT%C6_s9Z{RAAG}unw2WO9oQvk(bc)-xiof4Y~qy8ERnH$A#!9^_GN@@Y(0XXNaM{^p5YopGmN6@Nb$ciA%J$9PZJ!^*Puej< zh2oQIK$1Zgs1&To`(D`+x_oub`FEg3BwHjM3W&>+l@M}ywknhxyvNI(92V;_EA_{o&VUk4uw zk9|VRsPX>b;nui_sS)*ZRG)x8M#+Spf~qCP^>hg}@PO}Ogr9OPm~>nsSrF{XAopH= z7``O zVWe|V&1Z_`&#zV&YhQ*y*?erUvM-Z`%NCT-37u!I;OQc77V>>(R&A(HO@ox_uGfa+ z#;R_50*gSkwtyE`_LSNc?gWlvbj z!nvq5fSi-cUU!E5GcNlSQBrw4`j^I!tp?Aaj`CY6x5M7N+8%C+nLvFu`nk>775*w$ zkeHy*?bF@6_2Tti!lUw}`DL>wG)7PPrGIbFzy8u#d-iD+E_}_l?s2gFDY>O2J^#`4 ztuMF3A6EW%JK&*T*Y%%C`>{)XiO1*Op0Bg*k?(uE%kPS6E`KVXXI4GS2s6}XZ<|Tq zxP-E0DyBGH)L8J3t@DXen_w4vsJO9xY}M|)Mt0#S_S=7M6dL!sdjRxIqtdlsQxGN& zwUh#fDI-3y2hFmakffTdM?fi+(a%>ueu>bu81+BBG*{j?yfo^fyX~(DWORM**fmdA zJ%KCWE$LkbXWam8^a1Gx{GbT#SlW}|30 z%yD=6W!8FUY}l*=596Kj64vR~K(&;6mgN zg>q*}V4uG5YJ_~+Q)}UsgtQ!c*f8HM1G^yr%em_^p6D!}1rMI&`BiDHV4=QF(qY;`F#oti1;MYW$e{rQ-5~ z5Z?dZO%FP{vO`uo?BpW#1;f;-RUyMAXEz1Mt9%ny{umZa^&Ivj6zGmwUizFy8$ZT& zKMd`8i9nz5&{?pSI-RxrLf)kAip*vV$K91MTEdJVV?0Rw=$3%>=`@NqTPRWlmH)9ISMd`KXyY>)NtZ2OTT%JaF$V5*4 zjPqB)BeQl=ftv;PU*p=HLq%>%%fi1wbk#Q$zT4ZG9dMTtV>lcq(%z^HR%q1MqRCO+ z<$F;UP@io1T>FvVwkgnziUtm4XlK;l(MVD*25Ggv!VT%(DDniymp?xm3Q6$^P_lS@L18WakCWe}Vh-U;hU6 z;-vXx)N~2fZN`stvXr0{UmGuSPU#PO0P2uV)vrH*xNgV#I^ZPmzh{b4f}Z^+6f@$W z`nn{ty%c$!K%oloFtGn-w7+lK8n>&CY2oaO*}kK42U*rR#5M6&?8f;@YLnBRA|#!m zfLjMx(jS!41hz&Ylmt;n^G5X;rnOC_uJ#L)Z0W6rQCAO2X?&0k0urSx+YRKbp|ILF zG4}92b*P@-NI|4C-9S02bSTOyMR0J;L9bLO_++D$MZq*2SE^vRM?#L$ZM5dty7}0> zL5b1SMtlK5JyJ083^eM4h#>iS8TdJ&@iQM$NXwri1$ugd5;$e4=DL_6t&7xCzf9mIeELseZIFs_v>gQWWe^>k!t0 zeemlU(PyOK79Ee!GHLZ58Iu3S1u&i_)p|eEl(yC0#Fq?F{R`%h1E#qaC&WO3;+&=` z&>9gpS#r)EFH@{fbsr=Yr`tAZ{`pQp9sZQ`9PGIHaEoR<;tnRayW9fe%0q5fmQ-}C zT<4t;&ct<6Ot9*tIp0@A9cqGdvOWkrep-d3Ca_@cyaCAnb?RrOh#=rF=MLnUe1 zUp%e#S|=`gg)U(Deg>MkgMY+BaQ<(eC^+nVrZe^=wG%A6#J5F}|F$`g;m87T@CcmY zA-p%g^Mvw11IoxM^RJ38a}!r?JN9-NEF1hzNU8DOnRA@U!)2GoE4>ZFZ^PqJtEFXf zOeDoPHxZ`D=1oH!;q^Bphh&i_a*sjpIRdmIN&6jC_f{Qz5Ph5|LszPRb=5J-yFupxb40>1YcK z*ET2u)eIepJGZ7i)~3ReU(DAUYsyzxE#;Z)MKYO7HFdMqJ*GoIY$(0fnfEU+XVs%U`=H@@Uy_1>fZoFm z51?8nFHKdyV=DL}y=-Ij|3}N!oi3^p(qkIoq`Ay>ul#VGD$0e@g4_Bjh%U(q#v4&j z{P!Bi+{$|gaF8R%V^#WPZ>zU^qBM!FB;8+i^^W+E$ZFOb&QajA&9r$zSQ({;Le@Da z6#$DDu-jzg)6$gzRQsVn#ntZjCDaxS@dfj=hg>@f6#B5-@@Xjka$`_OIHmU8jF0il z1?@3knQr%G*|cka6MjmDJdzC_%fxUJxV`kw-&dV<$lEjkLFuYj4ccg40?9>O?xSqgaB=f$8Xvj4#X_+JUvwV?4?{2 z%79vAB<*%W-?81c@Kt(xB#px@TBD_x#ejc=07-6A7wlUhidocs#31JIHwk=cRSZl7kT^_#EFH>&WbndBC2n zf-s`_2U3oYySl|~LqS_(^}9RqbgO{s@&Q|ND$P15 zTO@=Y2jq8SW2otFH#3RtB34Khs|j^=yX@Y+f)SA8?y%{T5tlJO_ZF-{)t_RwJaY@&TmRuMgh{$6;9 z6bT4I3%r{eC?{GP)aL{qXaq&|8zb|v(c&(23NA>x7+<{@HI`XY=T&w6Nhp1bz)Rwo zl`B)3#B7n8 z^u1s{r~9R5slsV`W`SA9hSKw8>v(&TfG3)>T_%QDtNeBo*(q8kMB8aKBb)u;ESPCLv(qFJR+NYu5iJGQ7CF7w=H&h%>14L);v zJvRV8B;c|`v97vFX|^`Rxa2T$=gjG6={f$9rlb;q20g=_Y!{Ai?h~2Q${}eHz;r(~ zI=t!5Z0(9Zojqll>_%fO#}Hv7Li=-kh(l*-@g>sRvb8jSr5Hd}l(us&ZHWwOkj9 zJuQsI-=zFZP}?J+!ZV+x7HHprc&idbn4wN&TeRP~Gn;MJ%ln7(Mc7BFj}vnkE7*c6 zz<7()pIYL7DK^)A9Mey*J}GjkFyBQbTi8Al3!W-xdXsz2Hd2WaEgGJ?j!|ui<%Z zI^XPM0?;8V2}m3eh^cyh#uPA;_*%#0CD8@y{X^bI8+bq6ggbWp)usUVF}i`{5lW)) zC?OjeMi0n+mB}!6EO`=7hk%`cLGjOWSg%gP+*}KNU$O1A+;u0jBOiDX=SgnO;ivMW z6`d{Vyhdmol|^ew5Fs&TE4B-}exD%sn%sIix>= z!!aa9S6=k6d=24D62rroMUfFIvgULh8Oo?*^m9bfnWfxU>A;$t$?_~_yG`4W_G>C} zCfk=9xS8|#l(07+&i5q$?ZlkatZJjT4@p7QwHFu58H*&$gLLD*>L-3LF;vFFvkY|E z@D)(|g;V!TJXRe&&g%MW3DR2Xr6|S#KL)>5vasW7P6n?xy*V4(cq)5SpjI>hBTna7 zhR-j)y<1XuCG1Tm3lQGkliqKb9so+f-n`A;C~$6IGkL8gBUek8R7>t1CDn&Gpn%-++i2V*=7evZ3yAYIZ8`-cN zRP7Hp1*igr!YQl%!tvPoiCB67P$ZAZAscgqAJHR;n2Y*Au*IYiI7EH_KWCE>?}LWo zmK(aND>SakB{871soL5cnzAN&$cBQ?$?Z{@^QEZpCrot;=}&s{zC9;nfS(EJDJ?cm_Lq>qkv(zTZ8r@EhAQ0g@5<^BbL8VZ9**L9QkKbV%^Bn#CsXDOSOyFy9l* zXZZ|j`TQt}nA6ARoykF}9rY|k1HxN<7S zq+)t|o@oeVTa`IKFmeCJZ+iJYfgzBLrZyx~QV#mle*c@d{xA#WRt{AgKYN$^t33S{nI2=t4&Jrb-ls|F5T#^hVe4^dZ`bfqI zT;6#yB2VXAG(08(cvga??Tr6?;DDW!d+A7bV`RIeDh0HtKB`kQj0DJ}@Y+ty9G9hQ zKgdo>Wu&v=6B}QEAv=ADKKgkiEzxcH0}(YcZ2?t0b!UCV^m1(R!sc=ceH2_f<^y#c ziekNqBO6!wGHJK#ABR$bKXRU*Lw9~ty`Jg^Z0Xb>GpNAQCz)vEpK#%&=`(aDzi*ww z)eWGTBD6Z3cU^MjON>R*#3yr2r${#GUeURkUBBuj8r!T(NwgpDlB$ z^_{8$A@e6DQvu6y^g<2#Sxif#GxflEH;?tof0KeU-cYl2F$w*sN28zL+y%@6K9k$+ z*a39HBr+Dg;lJrfqSJ1tm9taY7>$63Y5!4-;U^}nDaac+S@*6Wh4EZDUYqY*KfA|l z@>(z`es6O>F7d7YtFoCii68uG`5L!BX7t8J_UxAcfcF!P8+x|H>_)zX4EWVW$x~Ej zZJi1buvP$iZkroIKmG_9XY=9IS)lN(8W;`e(LSxe46*a0$CaEWw==cb&UtwP$w)u~ zFeQgc{W9-QvX7c#wAD7BY+910Zg{gS*kHD zo`V3#(a&Ek7`KWhGj{<#^0v(ygxEqs%b5kPROb+0k=K3~O4=lE>DqlR-Yz|pH1nfM z4VcS@=RIHUeC0uA9YjVM$ldWM;sU&^){1F%sIUQyr~MyC_x(?G|NjBp-p3g@4(D)& zz0a{i_BoD2_DYgCwvbg+k~8eRGApxG>awG&x^RwF$f^)!B}zqvB+z=Qk9}Q}P+b!P9vM?)V)5harrWYD- zUGL(N);XZ&*Nj>UBsX`eOt;?P18~Kzq`v(xrav>K<4^~UJG{Snyx54 z^WWuM)sC0z7cfm(nAv<*z*;a!E9uYPZ?(C{b&mdWIkh8AiH1A1hL!j{&2xe8Hzo^I z1Fw!(AkE};e0~-wYm7U)vFwAm-=It`yzM*lOi~l^yX@7#OFO>3>duUkBOfjy!{4in zX$3K7vGXUt$$LOf%!P1M+5-X+d%%e(&Zkv&)S~7zBfS$k8+(d z5K|~Dhz_3)D)8+3iyt98_P(2k3vO_oaX5Uo<3O`eu&ymUCH)Ig34aNBC}U>~S;zG5KNpTB0- zTDkGJu3ZYu;$e@{7@ z^)3wZD^{Th*>flXN zKlYO3a92!Lxt{Y7AKt`IjD-3KV4Tuoi2JX(h1c)jvls|5bWWU4E}FEPw+qWjIZ-1Q z*2>!B360z6{{7l?KFW2=Zb?LYNO{+jFYQM7E-qbe{CMg$AyT=#-b}28vw3I|e6n?T z0(~vU?$!6{P1|qPwA_3?6ZmxY*K&fRT1Eb(gK@XrZiI7M3%deJ>=QXht1{mu-=ZWr z-1(satGLmApH=04|K-`zb}6&{Rh_mNNJ|aYad!UF8HB$SCSsO9bR-r2w|=GVlB_kr z&EWb0PUxLd>Cux#iw5H^qWaFC4g2M|DS++^*iNqgOh~Ms{rF~ZA@cg>jFR%iYOAd} z=tg_CVvYRzL(74HIDRsJ&D4Q0Yku!b`AIK&_btBu*bK$a*V90=<@AWI?Gq6}jSok= z3)Kb`dnaG2r})*q!hS*oNWv3%ORN#mTXOcg6Fi@X2)uu|YxI}wm_rMD$2*{}=D!99 zZVbZV2FHH}-3(YP)R>~?*NopY)qr;`lsG-Z!80y{!0YRb7)e1o+&m~f!;Kk%I2@Xo z>8ZHU#NxtAEv0k>5wi){T9i(!j0sd;KY|_qeQH2zobgSsP_J|BJVXNRTg%~`7nPp+ z5)_)j#T^pgkY8gedWS4>5041saODq%Omyz`00QFMHRKI)L6*$hRmhcfeBd!f>Cdky z&k9>PIBwbOn73Jxdv!Roy&x?^xml^bCzGhznuq4Jja>Y4y_i0pO5^ zJj&0vNx&7@%*n$uLU>e~IEm$P;{c!uNqxXmf>xaY7~i`4k|(tw(Ht-R-OENzv5#3k z{UhneRgzzQw6Irl9rlqj3cedC29OOvf|@dP66mFK7URV)BYLhb;>CV%WkMm~h}mdKx{@C+j{#TL^eZ~xG6_!0Zrf$A zjhlaqP7c+(*LMk?*a`&*%C3rIbV;g;t4`rn zyf#jgy-DjQyvUqcC;aM4t^2awq$<|rFnBW-Vy%^qo4hm9C-K;6UQrPP$llEYus2#} z=TZvpj}qdqtY^H@w49&$&`D}=k8C*vzluG0n|-A(-880G*gv1#EX_7Sst*cc0x)9o zOM`^Pvs;Xf&(CwhLT1^5??SNKszLXi7_fRts-w~ln*W!!lb>mgFDuhnWCe9!xchTQA2 zHtCp8Q+%?6NtRzvfoFrClw?SaDBC%2Hx*hL9ioEgeTubTlJyxsPf>mk@Y41B?P>0Rjl?S_O;#Xor}yQkmLm>tahRz zFuzgehI!P&=xo~MJfY?yv*(_wl89IK%Rj4|sG(nA{mNv9ScGm9Q9-3%{nr?uLEO7! zafKAMt+4z`;V8_N6GND^mdqdLbmjIF3g%n=L2LZw;Z$j{I}nrQLmOyg!)nh?}{cw;R7@wA-h#Yk8c)+^F`n%eUWne&;=t z>-Asmh1mr&U%YAq7qN;9D|3@LPP;rhZjsM8s4ud)&b&69a~m;eCh(CZD6AL78$3ie zt6~(NX1VI zC>?_->O#NkS+edL`P0j(AGdUM2A!wJ7F{XLN6q}42m;J$Akw>FGbgKQqcjin=6^q-gm-5wwh_=zl2B${01kt z%&NtUK!PfrYnrE!=*ERS=si3`_$$w)YkuCoofhAjJ5*DO~|Prrq1O-RJA~!A3@GHKW-kskUke^Kur)KfAFU3*&%Z^22F$9 zMg=EP2Lb1$t=N3&38wg(Js};zd~qp9U)S3s5h&wHus8BYj9bXf&`fj{9mOHR2j~aw zicaak-&F+f3Le(}>?gwFr=cx8qsu?2sy^5@&GvzaFZJ~CFNVoH&EX3-1rh9q$blzQ zJJkneS~v~%7F{Oi_GQ?J>O{mL(^QjT2v~K{EswoP@(iuEV$urxm59l-5TA6paz#r| zPn)U&Iau|)-Gl{7(JGMu7`^SB4+x%_L?&fF(@lf93=)+6oDoy0+JUi?!LjC_he@BU z#H+Q5G`%YB=wE{UR{bXi=--DH)crtu0oGSudvH_TkfE0W1vi@K;NiyFi_*SvZSqyb{8+p@|fs~ zrp4j435=6;cdf--TaE@>gL4MieX0U04x3>3NXD%&detXe4q3uO0Tp8Uz0wMv*^NGz zoA~%-Vtx?wPjq(qAMz(77BFP;0;J`g&q-}mE9v6oV&F+@0hC6My9)_1~PaXiOH6a zo0Ui*p9=rdOr5y(n-z5HAuXcs2M~?Vs%uJ~j<#MNX`Un8S^v7|OVg2>aeZ_DU!gSC z{hy%r);sN9sXkcl(+zmdU9Ovf^%OFmVNq*QEii0hL!3CH-$iJwpm$f$r)HO)dTj>w zTySPG6qC7%&k??Cs1-fUvjvgJWudn@>u>~ydXJ?p9e-w$d3)i4-2u1mDpj*t!9IVK zF~>BJ_f}NSP_$zj+Pe3zZ8{n}917Vqt7>#^8e)7Idz`#+xv;{n9wj>W+!R_=OMgML@&*nYn#al$Sq}vPpA@RsD zz)djeHd?;#TFGj9J>D>xVMxb!>IT?>9u+oa&AK%81wD>w(&%ab_8ywT8u#MK46$qu zV;VN~sSa&ui{P~nZW@fSt1R)xTU@IMp4o5>Vgg?X_GU~qO+Sv?q)B+Ggm86t^84Q0 z8r15~ue?(Nn+^g{nJwyJ7=1OF`{PyOmq(9@J(itibhBr8<7QQ(iTW?L z>5mJa1*=#6nEj%8=tKN*{OU(cxO2TNuBYF;mgZqp<4Avld0T5i5=M0^mbS1jRrtH2 ze?euaYcw~!4SKVTy=E5$J->NgvA-lB%BdYr6n7Wcr@vPx<3dQRFU(hj`ey#Sau35? zkaU};-JGv5{5r|+wdvft9JG}%dhq~5F(&%m_&?5D_?7uBd)+=%4~0=i;P$Ug)r6$; za_K*yNfhvRz46`?;eyC0{Rv`90s5{h_Mxy`CQT%@ga{&?OBMOkaf_z5r!WU?we!So zU&po4aZcIWRxrl%OWuyF)XVM~3iIz($NSVAwBZTN7!qFcF?DaeS3$iz_d{zCGsY=o zQs)m3q{Tu`B>1sgi&eH1{GeBxnLm}TWN_Dq?Gfws2%MX@UFotpnV(_Xaqd}mvG^#% zfTwi2@ExH!O1C>&<6^Y_K0y;M%oj}8?i0F$P3({+(eM$7rF4y)V7ns(?B&Oh{@u!OJB0Tx>&oaQ`pe~Pco>bq!hZ?nRV+^lZH0=HAq7OxjtV3&L3!rkFY5mfFk?i#R+Ei_d+CiV(Ch5XU6KePxCT${emm zgZ@`vm8F7g0sTXUY=YfbpG73qj!gRIi*=(b>9~<1I=^g0zJcpm;t94;7Pn?%$Gl1* zpfm9L^;EUEpV+Dto)S&_^gSykBUf#Z%jk3de^)N}UWpx!U!JE&qbBTw3B(3e`ctbdZtrLR5W5=S1~Yc*hYlD}^$nicbOxq;+qx+$9{#9*gUS{iP2$ohUIa7c ziqf4lId7^v^&^2tQ_1D95`Lu__1n&gp(18|DwDghl5kZ7|7@4cjG)F|@F(^jTJyl* z>POb|RIkf@iT`IJZ@*ygz}sKKMQHs#iz+@SBqbAOEde{WGnoH9947+HPmW zfycv$Dz_ELUoOd1;TfYbxvfC?Vw_Wc;|NjE@{M6aUk=wCC zul&`bzK9>Top>!*MVU9=(@oGi_iqzn*n;Mogz4O@=X54#7|Pdq?dF~O`q z_lq`O=D=SF{Z5H}Bj9$Tj>!kme!C^x9qSAv#;z)#CfMg{10G$8#aZ|>vadY%RBw8H zegEg*oaf>j7nc|rESgth^qYr^Wj1mbigT^s+4)}$SjntzH;D5Po};+FY6QzolC;hA~rGhbAODtUeQ;+ruTr5U#zPd4||Vf7zWP8K$}1 z|Fm2vEUkd(U>G8nSBq0dct#dPp>Jg4_@uL9ww3kPja$=X&5oiTqAJs~@J1!s!+?9D zv-tx(rBvaiTOB61HXX4h@C|mTLWJ|E1R!6hQAJ@<1HZQo|+Qo-D|gxTg?mc~2s* zI*wH7oh+DE9hLZri1Ic5$-pEfybrEE#pfq~o7#B4zR>R&T~uMpl2Xbu*2RT@^2Tta z(lHnLbg8e6B4M(ri0$>!`^)M>5_!5AH{T`#r^Nm{6M`G)2x+%UKV`0^ohoXitw563 zCuxTu!ka^%RL9M(N7h{L`|DgA`0~_7Ltv^+>gN>!dFLmoC$n>qm~j>7P)zJ4{8|k++MaGn9*L=XB3j=j3RGM5MzqSmBWwKW8gRG}jLt z*ZaC?iGyY0Fh2j<_<41kflCD9FJp0gdq^!DS$kT06%MBEpivcZbE1# zL(CcC_dTstq5iUGrkA0gCvxJVz}Y+Fa~iDzITg(A=RmDnv61roH7`|NZdE) zM_+NiZJQ7PTU=b0?Z0~}*i@`y!cJb!xOLd-CLS?4y{6wiYfntALp(q+}&R%{nG>3vP=ysJL&~o|$tg?!?12uMa9} z7Vum9idR2-FKzMKA~%L7uq3=1Zx-wbNaUY=c@v``% zkU{1AjOiQNQ$QDqub#tR9=R?wsS#MC^)OhpjrBs}adgQ;Qm@LJN{NOl){wP`5Ladz zfJf#;dWCyg`*Yg(W0@n8lH~z2)y@fjNwTFu{CN^*eeo&l?T3+8ZZzH5b@cr0_djGWw|(*bH-cgAiDsFhI68U&klx=&S%+I*%QsAZ21cq zGl_K{aP(fE{${>2ev=@!h{_??IwX~9jXjwkSuYXI^JUY;{F)CxklxPUn`*6HQ{1qZ zhw?hb2Qje}Ol`titD>!A@BUkya`y`h`6oSVQ*_z9>yy72g+$m8wRG3tazeF)43j6V z`}iN$KQp@=byax!+zmI3UD25VC=XW-I?5lJkz8TS3i=KPeFfe{m&(v{ z&8dhdBH-uEoB@1G{5sXWZKaEa0A)>>=o1M*I7(AWNjlhcPW&JGW)!M4M$mq@MbN3; z5Z$#M{cx;Tz`ExUYca5skYQJSrP@y*Bwt3D$CABv$V5Iir;7dr1=HPTF{fqO-Dm~5 zYucY6vMsun^-Bfz>4g9&Yi>uoHX3=CR0kXBO1m_KFb;?qqKfRf}07nkm4;GQ-JQ{pNCRgb@=f(wBOmD1=Z z2WP48Cvqa?%h1ytskj$*_;PH3R6*~hLeRmBnRV%p=9_w;8Vzu$Fg=IqBBbT8l==A} zNrx7@GHOv_vVnoFtYJ#dCwz3(@ziLeB=N68J_^|G^QE_3Uk+Dzb=E zGWAlEdyQ(9MY?DLyy@N+QTfzkfW|m)r>~x?}oIgKasZ@8E~=tJg^PksiHl z*J=xaY2>m%WAi4w`(0s{lI=kKNwnlT3Rs<|nBW)Vl>6~!CYXl|)AtjXu1C*M0mhqX z)f%vLO*j1_t5AM>#&=thI#4KYK2&@6&>R7Mxtxg>XL6wvE&hZ#p<69F$E;L-Qs6!4 zs7%&!JcMh0RX|?77Utb6ffYe(rX2e;r|sqmBVUgXd}YaEI82tuWNT%ntrNMt#j!2h_AcnfqzUQp=s1wZ^uD0~;i~I7h{o58N=IP8xW5QS_yS z!schBtvx)10&N}u&T*CLQmQDXocp$oU}Z*nrXZaa1OSZA%Hu^zr3%r?QN6s+$#43jwJ1f-f4jHuS4O>pP|ivQ5f+(%fZ|A%8J>57yT&B z8jgu2DM2!wZ&fKo@YBsD`Db*+pk6ti@941>w4ap>&1xG;PFbE%`i{=}-URQ7mN-fV z&g0NW6UqlQ5?y5UQ;OH)ZFC%3f=u~OU=m?n3-9CnAdm)B|UiO~-1SHnM4mt0o=BOLevgpR8*F3c^5w4!~BP+b52|;LG4Y+O}gSs z`ea4W;M^Sc2}@}jz38)CHj_*gBO`lQ(QTRIK1~dirX9+I$MtwA<%nbOxCWVt-c;uj z*W?sG0HYmx!PEkjWdpp2iGIKUCIUUK`o*ka)3oEP0dzcV5HH3>xK}H4Oq7Y-sHUSuq@EGxfeSt_CAq39}X`4KBB9@XcZH7R$z zUG}sAn6#r{!~ls18|=hln)FsU5Ro1jkDHS8?l1s+%o= z8np-W7ZF1&PMOV#XyIA}!3|aa&xLYJ&ji0s>1BkupZL7ETT`l6nig4568BO+WULc4 z*~uOtv_BD5y>!g*eUWe~@>p%M0s}a+_I!;Zn>~f`#+vg<#z)s8Rny&3*#c*aM9Y@t z2U1bCrGT|J;%({vw=fzR)N?8#YS%Ngx$UNJ_=<|`#RJo4m zpo{xgh4Jx})Of+Zcr|eymil<=X`*SfBq1uPL@mDQi2*?cbdW3^cVViykJp;wHL#PM zu^csAA`q=4v%0JBAeZvL?Qa5NlX&_bPWQy=e=^ZhO`I}~DStS!@=zE)GbeqiKG|xP zh4fmy8`lB4wIB*`K);2dTnnObp0e9;2NdAz41&<@79-6Ph6go1A;AbP7o+P`L@ip| zGbR(TVt%d&HB*GPqpL}9rSg-J@dRj2!wpSLe?p@xboEV6g z_vn?#9|yBXKS9jdnVt;ZJ`f}|^4gGQ+yNS+EPLQ5>+n$W2^CuZB)I+{r}T5--@N8X zg)FUrEO;&Qrj<(Ag=;_zLd5U>QI7efg8hsyqLp(TyVk~4Sa5z;g?yoN&68BrFE?+F z{&G4zBS7a7O?jg~zvY#LwlgZ|A^~k#q#ne#@5c^AUu01(`?|S2|K_02DvQ;W>dH%5{D)F7a1ym-SR1V~_RzX)ywV5e!A?hupfBr5pwk#{)M(hm&ews&b za9LND-vQHdPv5KXfAp{PTar(x|4elyjraI1-S+REjN)f!WS_#Pq3f>(<>s#ZXZQIc zWP%iyB^AleclajAMwH>XHe;9q2A0z3DmOPjs zT3w62Tdv|}uR65<&v6YL%JT%+M<$^$>wZh=4O^)-dG2JX#!vbE{}=>lq|1?yh2$=N z_mj_AZ7eyNPM(DZUkNjXqo<`1Ab0c_%SzsRV4Btu4CRok$A47a=%mb;JCe~jjW{ENmE z{nFO=@)LKl`0qwt%h=ft&wA{Gi#=yQJ;xhctimxHtoPS8D^>P-O{VtkVwF1DDX?@- z7O2+#g(89@6jr8-_NoESqng3Xj`VJZ{lPz{*UyH2X22_ltg5LX*ngICC(C9hk0Q?XdgGP>BhpYRDPj%s%gT38jU<8yW^mZaqz z>LFLRQgbk%#pGgfAGGwtB>-mGb3i@8e^3}Bm8+&QNeMf-p6>WgF8>#M=wkmhp0W*9 zB1K$C)+2RE^uV_ZZHb(&k*Rp0(sO-Xkn7Vn;ggJIRB4~Wta&Q{BgGEaFMb=P5ZC|Q zMw5i4uhvMyWN@S!9sMJhXRKSw9_xtRnvWfRV)}kp?%e8Wx*)&q7w20C@0$F1tpl}( zW{=oM`V*VI{c=_3P(AkZzMotyIoTxXibU;T*c0Ug*`GO#p<&4IqwFbu@_ipOOx49V zd=`mD$|$utOgm@oxfO_&UV^OIZ!t1c1B2*6BaYCL5DH{%0fWuixsEx!RXfu68wvVE zIaIa&arx;_e$??_F?M^C2}MAR{aBc4Z~N%X_%B;Z-Tt|E1l`*oToy10C(JQDV1Vl>C_M_*$xis4}3;cX29?J2K)xKT?G6 zX)5)30F`rZ=?S zKZW5n85e##+|hl>^6I#JM$u`~n^11f?20*M zP_s3WulMmUw*x*WQ4)adaeM1a?7l^C)OIXbUbm_%<+y{G1F`XpC`rZ1^^WROZPw?;RhJsz&*}3TUp_;)z^2h8Qe?p zH@I%rTS`?h5%4jYFYA&2nPe7aXxG3B^``?Ej>L(k#)&(B*Xv&21?3b9D6E&cg?Jja zf(H%jZ@GdEWNw_to+Gw zZAqy~Pyy`uHQ`fx>lLcRBf7DW24KUb;Q5K*dTsbykGSDxXed?Ja=>d-_u|W-01^LZ zF%kmp(#{N`>~;C&Skii++S`*ggj6Tpb1pQnF5l&q()MX5xrbKV$6}*chB@&fzHRfp zR@AZX8L%D&W|?Ip)Ycni*NqTqa~HiJ{`#qvS;Uo766Yf!1K7~2g6FbrJaG6Y(a~0` zoM(u_5%nArpI@;6-W=zd5;a}n;uuvo2QM>iK*bs}Rzi;`(gGIs9D(84Wj@Uz z1uXsWnfIACi{{++?&=d_V+QW$r)}}g)knbB;UhlIv*GeZt_uQZbY7`2=lf3B{kEH~ zH2c&wk#D6+=2o$T@HeQ7D(;ZENj;G6Wy3AS@@v&r2K$iL3z1@#*z>1mPHUcS+QfXS zo_wU+2iBhnQsAWDvT3vsaw$HAemF!>M6?yyx=}3*Lo0aV*9%w9$zOUY_R8e=azVVf zoCKizwz*}2fc1z5`gi)Ev1mx4x9%$awV~}v--&!b`Fcqc#?ZmszNxTi+r_sn0p!zTR2tRt98gwT01@apcdWIGxS8W7#LkFS2Z}fYB0EA z^KGlH@?ulE-ce85Nn>YJADLV2KX*||O+Gk#NXD{ys-?Ls4X`aTtSqhFTDo3~PGbyp zyVyXlvX??jVaoEHs#DQ7b@Dz3WbmdfnO#0!@vdnTG11`?NhH&+-&-WItnSuUdF<9) z@QYqhaUcUjeQ6~^8T?wwV1Un7FVKqHTDOssn<(-_p6ihcQdqi5|8NO2zBscohAROp zG9|7zzhgyBmi|XiaYR`On5|g={g?SF77Q5VSMovDozs z#Tu37q&*cXSAz4kJfPSA>JiJ*ex zHzBI$11<^3{ekftcEy8xQh&%R6l+;FOQ2pBmkoGN5E1LmWYo?;&t*j)YJ8V319tfY z)I&h$(45~o9ELt_j#fDK%W*?A$ZPyoE@f@6*?HCnEnw@+dnmm=p7PAkUHux_1$pt$ zXj!^^Dah~n{P}UT@yH>(!T1CSt~NP1HyXQ54>x3a{piA&^lMwDKg_q%Q@--nTGmHiThl{zXYr%jWcA6M1`N89vc{pXk^oVfS#@&PxjE~+2jU@B`EidPBJ znjG(rY`J;zn`}#Z%00BUh)~X7@22%e>a=aRpB0xhL;FoHbg>>-f%3HIehCC#e=D6yu zl)KA|A-n(H-R0Aa>cL2|{#vVvzI_~=CJ)zFSJ8Jo8LJ=n75U=Jb1RtIaH6*l+Dz88 z6>-rp+<4*l2@9nk?;y{{?XsRgz9nm@$HwuT5N_kRdX<}B0O!S%U>3&f-}BBzx8VlV zHBmG!5ymNOB0+wprv~e|auzHa+M>d0as>~7gdZ;olw!?UJ%GAilYJ&%a}W9PvOoog z$d`QLeknL~;-sL32%tbHnif?jcjH9C4a9-+ku@eP?HUa1oZ=>uIL>eX8M2i^R*DW$ z?*)EKiQ>W$g&RW!{D5w?{t#tQ_m=PDC~RjPxcc3RFkaDgT(Unp(YZ`s*3%f30B*-p zsSN(Oe15x5>He+gbDm(lo2@3v6x0ja!glYE(c3G0yY=9EjF5cFQKH0SwNCD0y9+{{91ui4%CE@(e0y9B1R;x6Zq zo~gE!Hpc$UNXE1fFe}VWG9#IE@fR>d?2-+hKhc*ih!$N0iB=6k>Q}WS(4ykY^o3-A z2a~Vt0Jz;~3R}t$0s}6gPyM!v^o`D(fMFg8U{rX(8_n)-%|#xK3(?}!u+E`cOTv1s zDxZBtMv~n@e*WSXCpPjGY5BrE;{e4awdEPqz)b|ec#{@@7) z^9sL8jt>fw_?r)y-LgxqF$oe#^Am^YPlqdV`nv^7a10kpw#v^tsb$Szrd_fXall2C zXu@gmFtmy?IG#BKDLD=oN=Zy@yP4A?Sy87R(PRl|bBZ5*3>Oy}bu+ zrvicm#aPG9mv4kZ_M8j3I|>~(WHhfBVg}Jsx;3p?hi+)@{Drl$L3>HL@DiG1*O18f# zx`PUvX)O(y0O~1Qe;K3%GuE)zl*tsf{Bp8;2LC~$YW&5i?7 z`++@Jk$bUX;D&Mtp@MxpJ{6;R{|aQVpHD9y68)}RttRFAV(2GSm`68!FQzh-UnHWn z;MGl``%dxlI_$iyz-9(`3olZ`A;c*S{ZlR16>5*;6an5%)z-W9V;G(lYB*C4nwy2N z7+b!VW+1~l#jGB!!UVCJEjMfhXu%gS*W*X$jr)u(+cp<0ak~0s>9(AZUN1qYqFS)v zK6o9gX|AG|GcK?pcuM&a`Wfhomo~6@D>-7iO1;33TnOHhJ8M9MN_|lk^aC~r3mBh~ zV}fcM66ygiwT`j10tL0Ph3V4$5__C=1&z6WXw}P?^hBe9KS012Q1bOmkdcR@@d<&{ ztrEky+&Ccw_pHnkN8xKaJsfrBYyq$>O88|b#BfkxyQfB-^XeuTvPIJfHiG_b*327H zm40x)u30EY$f5MA{N*pY396v0S5E_Ks{C+irP!cvPI`YpS3G&n$4H4i`kBgN`TBoC zo&C1&{O=*~E9ZRyG~iGIN}PK*C}n4Zsr>9DSZ;nkEERMJ0&b7jV_Rh3cR^Oi!M~gH z2g-{x%=wc*LJQbCy&0hXW+d#s;UftDAE#W}JvgUs-eui;t6sOXC7M{+CIO1+fDzR2 zow5Yyqr^9$=`TXCY0;Tdjr1jctzWj-Ngtv?**EbTqJVSM*(q14}CytPk%zThNA^ z00Iims_4shDTK8ch2LI&0I=X^pX1rCEBs$boJ*-j%?Y=Y&0IBsPn9jg-+K(_izH-; z`Kon!;5x-zJ8Q0??|}uLq=Q;!9_Lvq)y_gTww_3UyB=hT(S^lQv(9o&c>Ti*p7)KZ z^!?w7iM@`aSOYBhQ}mn;ngv7*z}fRan1 zPL}n?#ZUhews;%rU>uG4=Z^}mwv)_xwezcTbm_n96Qb!8od?19cZ8w6!eSQhPSs6y zts6-2yp%4G)DJZjURip?YHlC955Bs>w|ElD4hs*)h|Y0{vX)dp__jxt^8X1U#G2G_ zkA=l{R{1H(FaB&5@vDigU^PpwsP{Wbsvpq>j{1y4A1`e8ys!}c-1DDAO|j6nX3dkT z2Vv5Wr}$Sh@r6wZ6JAwIIhSeTM77)hng5?QDr_JRIz$bYp1S)cHX2s|EGMU; z_vA!inC*~uRy9-NN&V?fKE+|TC|W>;Hby8CQA*p5`ANR%jAzQ0A@9z z)S^r(7jWz!UakVOPnpdd;qCW8)%OVB#(gv*B$}n6NSVa_qjBw;*Lhrna~wkTP6JR2 zHnpqsmqUSc28?$d2Npk&)<0)}J}V*vc_BP4U2y*gc@noR%J!bQ{*_qB2h3wjo{mFL zdcFw7oiI5EPE8d1oNQ6;)uC0OcrqTsLZo>M#fo<^*7u zZkX4<@|YMtHvv}j1MXmfrPiXh6TKj3LDBswG(@{PYNqkje62~(uPoR7vnu@sBJ!Ma z964qZ{qGIH9Z+XcHiB9#4Q)?$KJ!;6zK37#?u*U$qs^Z?UR@uF?|e~z9sYaVvp>3A zvcUX=r67WP{sU2Ddl5KYUH35Ac}-fh$4R99FQiija+FU@iV~+^2Uc3?!;<@A(5%{V{L~=l)@$Q)BcGkBZ;7q>A1jt2R@Dqsh zylawJaf`#kHOQVz=Bcy);EaTC^UG;d!CyewIbKhhG5B6G?Ajwr_U+fBqi0^vV z5ioJ@)i^Yg-qdNtTaW%xEbucZ@4jrEi!S{S zN_Bq_IFXE4nE_2CiCHYgTgNOt@moXXu93I~bCZ4gHHm{SAmE0VC~Y9}#5NgheXknm z&-+?x+kY7~%Ww8w(D}Ou`ill-+Yd)%Y~3r?7l>H;^1Q{N+ZPyGd};5Nn9<#z8cmfi zB6qNeO(FfwTdoMb?~nnI_AhVn7i{IxD`Ebk#eXkf`;)Kea06_%_Y9}@tK9S3mSDx! z1&EL6njtuzQ7z1>meTk(*gn_dKucaXdjmS#tre5K^6(`r@R7`M^ZTqj^N~N`Zm)yc zbwK@`>)kJ;k9q(L)rd`7z!E{Yeo-io#blG*p2sqR%G-NS6R_~#Z+Q1RMw#>l2wT~1 zkGgvd!fI6Dfxx(xYP+Qd!Gy=4MYe8_I?yT*M&Iof>J@NwKm4~qluflWo;d^1fBc>b z-ZS5mtlj=Lx^2xh_z4s@Gzx#gcYo7gU(EC5Ws>mo9+$l9@>wzb-)sTxzlQh|!8_F^ z9KGK@np1fJvV=0HCCgNRj42)FOzulsRrEoGWCJSQU_jCL>n~S^D3SVme@ZXTcU=~J z6fwOU#rk;H{-N~U_Xg?mjHLcd+4%Kl1NTQhfVnYQ zkH?bbmjp5$KK6vX$hNmHyXdZV?%e-zbnoFzzyBY=F>KCf#>Ng#L(a^ZotpFckR&Qk!x-@DVp^L%fkH^~?LZrauJ`kj?H>+vw7qxj?7M?2aBpELMw1q}=OT3P3zPX~_= zH@jULW*paVk{J_kX*B_ev}Wr++z1RRAiRE?1@%8lA5-Zeva!(WtUUy+stnqaEA&Qg zT=ja}UPp8dJ1-du%WvmXE(y^Cs9p`TB*Y><#IJUYWL12hZuxXxJhH~V$sMJzDQeen zx1p8mMLsQ_yj>lfGJO-0w5Ch1&Ry)bG5)tGceXNww|=uLk#0+U4F6BiZ6KqeXQ({k zMm)Ez@vnnMSVYqRFF^v4O%=0CG|5Gz`o@JAS)#LP&bG1(ac=fv+`Df1RHf$8G)9(k z8CGmz#HvPEk3Dw0QcKPwwA!l3?Md!7dI$O?Fk0pM2-_KTG+3(0M z$B3Jh`p_A*fVXJ}S!ZwDfsSWRUv5|?ixd_Bs7;vya=${aTbm|-BG3MypDv2JsR@mn z<%@cs(rCd#9LP6g?=x?e*}wo1avPxsuJZD!oIZOGSa($@gD+ygIxK$d zqiyb-jrT$-Oi}Avt{!&%#`*UrPa#jBk)iNHSoTPv<-xwrcvi(cy<|21t>dSv7sFMx zH}rvWiXBwW5UIF*2JwxrlL?RY%F)HRkJ4H|E_UGdyytpei^$BiT>C>l1|+)M^$&t9 zuyGa|zc=o?+y(gdeJpdW?OM4ctegy7>>D|VRqW5@1VUN{n4fUcP)i*;afgl3l{3^#8UBqS~K60*qBnvRM_G3!1sy? zoc3r${9E@_UN4}@9@azR=l~vpqUw-Ua*)6UYuz$L0cq+3^iwzOk6@h=dV3l1eH{-Y zqQp{JA5Mve)6o4prbm*}jcL(@0FD>v{w%t(Bm}#3qko!CWO3lJU9GeJ0W@V}vxSFCFt|`!i=fnnX>u}pi`1(4JfwaC@@>s0% zontgYe23V!2{%28!`**sw!nKI5uGV9uI_}*378zttc8o}m+k!jH0`IF5#r;N(hv?N zSTxE;V}@4cc}$CTt{1ANuWEg7+7%hNOuX#zOY%x9d(GQW6e)&<2gb@LqUK(ypv4ua z{^UZ~G6KRk$OsS&3K8z`$L{Jf0@=so7$hd3KSvXQv8GzAK=WjS#-Tw_pQovppF92T!?2qTeY z9&ZN_cH{CdalA(Kb~EJ}t_8&I0MQ2$S;k%+{8g#J)nn_Q!`_KAn=Ko_C9y2Me$w1D zeeAX+*X^Jr^y}-TQpmF*XDxTdo@q%_u)3asc!Q3@lU*!@g(>RHp8)rHg$9EoZ9^Lk z;FrSp2e;s#mNab{L*Co`$pH%-Luy6Xs+cHB=ea=Q87ERzm`AA)$wdvn_L>%j35u%x zDq&E!^Q?wL(WAHo6#Tu|``KLm&B-sWvF~o{tZYnni(s{E(*v5UJ8GeaYHu;m#qwe$ z6-8sZ&*6zA>r4t$Zeg@8*?FcQf(tO{SqZG?pH~aRC_;1JwGVoyuy23^rSAxd8wAE# zquHsr2|Cdhh%>mox@9S}JgjEJ$;hOv3xk@u71c=rZ7C{}wY$gT>%{(JQ^HJJl@qjc zKLcnr0J$CxVzfowGp(z~5EeJN`8xgvkv#$x1yx2>kf!D~PX4<*_xv}Z|0u%hY!^8|CVD^f?o z^Uu#I8Pe`gnzV~%-JV>coz-25u%f(v&AT&1#KnD}`IAMigk|Dfgu;JDQC=O@01Ytv zZ`1ZlCP5eYkhE9tgEb~*P3w7%#beJ=TukIX%~2lA#crMKGqt8EdNNGoMc;M=ykTXj zL%6S$*0vAKne-++F}(RHbEgNfUa@0&cBAk-`!uyM!UpYAn4McSkJ!tJ!6pvSEh${7 zyqwEDCOu;3Uj{0Ev$T2I=WzSNRM0%IXM{-GDsYYTb^q0OGW_TUNG#m-LUMO zY8J*~-DfU=PES!>P)J5Q&EAGW6h&oL@VLch)?doz7R<}7fanBN=T=}c3amg8v{*2W z_9Z(q03djvE;Na?{EUhJ-A@5wi<-3G&GSW9)KFp@5>ZsYFdo0Ad%>>2L=25X@QI#7 znfzr5Kz3%>5>Fub0VUP|4S$#=YMc}cB0WMkrQ@3Dcl>J2XPY6ZO9YB>gBghOVKmbv zK>s0tm76daAMwEH_me_nV5B(xGTaQ}ag-gB&U3oE*rO@mkgr*YIpDr3h7~L_nBh(G zW?hSq^pr}LDub9m`aePQ${3BUk6m$TJE==Oi>K*mj;V9|4FBTP&*w2ZLhwi)Q50`NMZi0({`J1Efj$Wo|zGzZReBa(i6ag>$1F_MuAoY zx@Q3{KVyQal-J`>)_V+eevB>V0(BR&PKj0^SAfJY_E0Y91lf>G&)iBNR(}RM&Qbnd z1u-R^p4m*^p32PicOd)QKV;FzxW^=IL805vjs|aJ75AoLv`J=}-rkT@ot_&lH)*!d zio*oa>DaExBObpc`xgHv>tXo`^)#Nh4v+XXug&sWcT*0TRZGwplW-?TU8fBH@~B4u zOMmVrZ`Qd5;68z#@#y*GB_99wF-k=y3p8Sp)vr+k+VKTxeQ}{qKmD)-yfQ^Aq-6f5 z#8=CPW_{^sN#lPBnH_8*8%3J|-9R6dFE-tLIF>1`M0d&JNoyYm$b+J$9wtEOV@ObJ zlZ4NAdRJCn6|*$W2PDI9NN*C0@_(*-Fs<-=%ARkUYR`6tayQbRF zgZo8)5@_B2^!|#eoC?}4S=htT>6|6kIM>^jKj^!U1;gejuA}wIHoT!2_m9Rjhf#{S zz>yo-U(0BUQW?%9d;nf*r@1whriRhnL75w0nybx0$CT;cg8@D%{KPQ149?6cpT{I{ zOaCb)boWbISpGeVgs_xn+rGO!-)x${OekFj?@2G~ohFUu=9y+XbaO{lc#*w3;^3Cs zQ+(90eEWZ5u7iSU`x24c9@7b+wTu1dNB2Q4PyE|cS z4fMuV_C!Y*caan@jZH1jIc2VUP)Fq##JV9r$hqzJFLm=MY_w*g+Ghp$wd9VJsTH)u zFj`?^j`MNQrFDUuoAWdm?9B0JT76%+nZi`4yPvfPulYNT$#G5 z`GIip)Iw$$En~c%{%D$hji4hqNx`%jZ(C<<12-c)#~;<*IYo~?F5LOg_onyT#sVw7 z2@#)tBdMIiFC}!zOn#lkmt-3a^g002L5&Imc+X}1=miv(s<+m3@(h7ykG;xWS`>u( z^*9{w^chN;28!Y&3O2~t8p`#LGz^HlbyX&^o%hT?noEB{fJVpsk0X|~eNLG>KkxGE zNzwN|-Z4(T5_}pCl;Naqom#xU)H0$>w-2M(b1bEKXM%esPW@HL@YdeSrH5^kvFQb0 z0|3@wDJKTHwZeHMzd>_bC6PQz1y@c}(-ksCfkHD>gSPB~ zNnl12D9DBf6KwToI?l38w1PO9Lc-+ZPo{zFu%^N(t?Jgtjw1s)Jw)E=&D{X{l39Nss4Q#?Q>tfCD@CajelQEAkq_cdg=kSlPw5_3(eh|r{o_kaa};K zl-_rbv3mg&UBDZ)L`!w>8k9JN3Vn$0J3aW!~Ks7YvXxe8gz{0lKpEDv1huQ85ayrTT(-BSyRs2Y$5J`y1{cQw&m-LUoVL+?WG;^JFT90Dk1qGj8AP=K$X6 zV+{29PS#X+gjVwfoXiRXeoTzY)H##k{beK%mb+z~r&8m^pgs-RB%`{ssGy76`R1Dv zPvx>K*}uCNs9Jxj9>6w)dD<0nQ>0_E3;Z)>H=VWU6)RDUiWk*L&7TKPR+0qN9#G@&4wQ!&Y{X2g>NuKOppGSX~gl@0s+S#G=z9( z_UTZ!ibKNV3_npNc4D@r)Xybm$#e--yL4<)b+|V#bdPQ~lXa+n!h+~E)Gdu`G20Bw z{%_ZQM>FQkvW&ND=+sl)nLGSjVh{6xX>5F|(aQtD@P2VcPc$O7;K$FW71N=%VsXli zkHxjiZ9~Xync0sWL9yE+I{*1>uE%BW&^n;Sg-bM-f!)ke%B{-ie4BV}=aVYGFseqk zy&N)K!93eupxGM`v`#^f?SHGEGTpLc)y6Hbbx(7R9n0?j>2Cj0BA3dzLG(M5ccn__>7(SA{CDEY4E zGt*m%zd*MqPtelc-{`rxo&@#ERj1n6zwXN>{|A}8d2@1Z>Ei7a%cm)@v6OnyncJwT z{E^cRk1MZq*Ohr6b;LGp4{!YdJr`^X1<4d$V8EYUJx9N0M348T4mf>G6NQoec?HAo z_-+I6-ho-8z_9h4xTo}?@khDwl#lOeB>_J&ym?hWq`28#)IRe^A^hU|?$&b;mG#w| zZ-1daueo&rh3_hjm#9lU zxc6{Zc`|p>^f95)*}smw9GKUTsDo@G&v zp*3bQc{@+ryJt&iGkHqL`QoSNAOALf6>kcJyn{yd>Zn3u75*FQy)QV2Jt6+NvqM7* z`Y>vtPCl45^JmD{=Z!qV}OIf`wpF%U7`*d&Xif#HLN&Rg%i z*BOSxzfnmqT^pb2O>`BD8BAc@At#1801l@bbKRfUpq}7`48gXn7ueX~5@*u}rIpb< zf$$?mAvC$~rM=fRpjC zP_R5CG@>Ej;@2Fipo|v7$~BlNkos!!9+@O!v{>??>E3U<6Oq>vp{p~wxzO3S?ya56 z8-(`V=5<^_N8xjO2LBfi^E{8DJAJ5*O5G6~!?$t7sXC>vgjpZ6DT^Hz^E1)MtIkCQ zn03vS9!2O9wffqn?`-#(b^8;6!uc;>qckf1Tf%eF<2}2g-pY}u#wvF0?uP`4XD)n= z?%#6+cz(BIJ`%{!#uSH`g8D{gNzbul9mkpBa}yRbBMAaZyS7SX=GXhbY+okX3U(gt z>|)wDtbY&;Z#%k~&W5=^z{No&TP{WkK8e-n$0StEoWImp_%gb;$WHx^+D+%0y<>!Y z3y#QHJ7m`89<+6xuISV((325t&Q%y+P@(pN>1cFMq|4c4UFlSjX>?kj>*5Q0E0=fY zKSYa<;WSoXV54dXPKvo*fitKJtE7FKHYoQbq39mAhe!qEMt1p0ms}L9s?DD4)qd9& z(?(K{WN?g^uFj%Vpl&v}Po+vS7Md@IQistxL=-q^p`;-0t$nwOKp3`@g z=FM!1yORsDmei7EvX3h)Vsf$!aH(38HgMs1VbbGz@C4n)xJws?Uez|dE^xH`{eZ?I z%`&8qU$p)uZX*dL5|anfpJr4pacQoO#lFt<*W z=p+v0Zdbe-WHdM&{5uOoCD$m2UTKz3BGZk z?3#z=Hv#cY7By%n9v1K#hN8uiFaWu440roSSG6m&9B(PqHegR# zbO0VPX?<1iJ;ja}V^*zJH>k!8v|_xxrh#za0)wSU7S_zNY6{35y0dX?7UHbeFvzeo zKuWcJ2c4U~-TGfdim!6-3Z`b1`hj0bKMM5TuIBGM_DObvNib8VODtb`XHe-cJF1*g zCT?7mp|qOBRGM$Ee0cpKGsf-Q$lOGsDb}#5yql#*I5t7z{tYh=`)GB*X%NOjN}v8< z{l(#-Xizs&=Ch3`&OcCx62kK5zwANHg{lf4B}>U=g|T$}>prSH34*@s=Fz!4R2c8F zB7U!co-Mn3f1xj1rhok#&TgFQ*re1SwZ3C>Kx%MVO&WF3=&VYh1m~$;P(&ld>bErt zPILy0-&O(2KT<6KJ-DcxHAB=Eju-Hw^Ry|R)L#cRZ=i=vW+UqEd0jad^oAe0&`i5gkdsH`*KNeH=qTRYcVKcE>hp*SyJ8@4;xBRZ{AbZ}q2j5| zfUb}92PI8UL?gA8yc$p<9FKlQXC(rTjN?PTCp2h87YsdGk*Isvw|QOc8YWkW<2%r5 zU)O;uTEG5ZNRVCKPIKpz{eH+iP|5R?Np|BJbh@1y6RlN{^IdG6T^VaUxV%T2Buh3o zbr28jf4Z#oDE{uR*^$J>7p?l--TcC9&{}I6yB-LBCkkq>{~m{)gc|$-vANR1lB#SP6G^2Ag&%&C6>>*Zl} zz3hr!9Kn(e*)6)bO-X+n@OvA={Z_Er)1P^zs~Q7`*|7v64TahPCr{jQHHoe^-udsE z@7yN}3|}xg*v$!bVA!#){)x-f(7`FQ#jQm0Y&ak`%y$$@FP^NXq|CSpzDvLWin{zi zyz+DN_Th*jsH5JvQ9w_U;3W?@Z;nKA5Sv8*umT(1=DizL)cPIvl zmFRtDtfaMvl3m@=HHT& zoJ$naE4Y8vu7q9wuT!)R=kMjVF92C2o2gNjmAJ?^x&L%~TFQWeekw()dr`yn%j^nO%I@sglJ`Xb)AgzVQg z&PfV7&}5l0fXArTQ=H4TvkZt6A*lAF?Ixh#_O#PsttDp0Awt=izwXBr%MJ?QVW@ALX(dht|O8E0NuKimv!m4q3Dp8i{ z(b8w*rBxHqjR}^jiNwZ4^rv{I#ssd$SUJ^bt@LnW|9PLr2+MvhI0mpD3OH&HO}e3S zzE=gX7aEQ{8`Y`8)u0-lcQ*RH%9U}Ii$!aE>C4!;X_a8dL4p`WQpFZNCFn>HQO2JR zB@9}u)o&JRt0|n#AUZ2dIPi4 zAZd1^a$h&)W~}SRuIFx{@_#nvAEF9)Kcjt_x*)ZD^$h8-0Y=8Up@ABm7hm+6RG8W% zuhcBvfYp&y%kgS1a>C2cl8}^jMWxS0Z72=%LB+6edVB^FHK<>(ZqU@6!_Nc=QY^iL zH+#<9ZU>{m0E4IoYYyfcrKUy1*thnV)~kcX;Zx>So<7ZE3P(artV>wtd6lE!bt~== z%5Qh>x+PK`B#nfCJ^w=RhYaggTPjKnxMAzWC?kvWw zlSwfwqggc?OZfii`xXXp!Q>XP0H@vSb*zfVU5)Tlp2E*h&|Mu|zd{+XC1?c?-7Ond zzye}t=geZu?^bTu`=T2BTW+Zn*bPPZ_V82pSI8hi2>p$vu1fEgz(^ulglEmBzks?g_+wbh!K7iHb2Ci{duv#$2jK_)Gx8)Zx zOUIEdEED7Buu$%%oAv2ikq%8?>f3Kugi{EEUx-Je*@}xfR!d{rWy5cllo{y)ees0m z@hFFy4N5Gup_JF^*hgg_W{(}ks>DXqiSkqruK}ezry{(%xJ-;U?FE_V36l5{*g?~f zNs5YsXv<~X=o-hJGVaZtI};CDaZ|X>*^f(NN}nUR zpABa{qYj?fs34{b=yx&AI2?~ZSil~w^F*K4`mr?k?grt_ptl*H(ln9hNjm;3*XwmJ zZRd(D@-cF0@JhlG&q4(Em%POj$0&L+0Y)W`;Gdu^{zzN!rdjJ<+u$hmMeFT~jzTXu^dFM!HN>FKKe5}*M z6oS(-VRh0hO2t`F?1$~~nX+x$^>egmTt$Ly7z+MlbIzhvJ8t`%y7_C1?!ja0tpu0s zo2zZOIl!^WLDWAcayO%;+s4609fDGn(jZv)eO#n$J|)`fm$k34KzC2BcP01NP3q7E<21EUc`s&tT>M){ z{_kqFbKF+xe7$Pxf<6MkL1?>aJI>)7#`q3~5oCJ|f7TIUyqygh*}-^!JerGBPb0u? zXFbaR7%X|gkI0^=}i_(eQ!dr}H=P^x*Gf_C9j zPT6rU+0{+vme6)QHkqwx&#f6Xs5X19E@tpV8}2{~pd-nAS10Q}v};Y*b;+p0)U+x8 z#&QU7S4@7u%%0Xb=WL@#(JthA7n(I))xo3N89YeQ9nrT|O30hrv|=!^+_-28^Zgv% zeph!Uj-^)Rxp;KQ^oY+y@00#k-NP{2JNxh1MzYMwldgH(<9)11ml(EyD|Uo`r|W6S zAtxG1*g`9#C`^mXA|Z7J1DzY$_Oku)ShP~6dpUzeH33E(ia}9{7y7labQ~BKD?6v)lBuw4vP539K8n z>^HNF`q4s>%ZB^@gY)jrv8wa2pK?DZ0@!1y-O+V!?Oi%(zw<`>ujP$B_Q=Nl<(}XU zYq-mWVxpO`u+^h8Uw1j>`v=lL#u(R(8(RrzZ*xhiGQD*hsJh*>dV{>Cy?6d>Qj>{f z^59fv)Vnh>6{CNxcXT9m(-Iz9Lyu))GjHbZDl6IsS`B@#IK=*8-G@V`*d$d4eeoH zC3ir&p4}oFrp9mA5zxki%27Jns)NN(^=oDR5WFu~Pm$AXOu`-`88(1KRi@=JfWAi* zmdjZ8!MvGZ+?DTyhjFG2tc91jk*1^b&1XPWX%wEHbPec5%g0+q$*fk5O#KD?u_><6 zP{NBRIawMk%HV3d#HB9^f9%-3G_72t3xMR>haNg+ndxM~qRh6L4Ptj(#*GJuwtXBaRQvjyfkn!U4`fIG;5ypJZgx{Q#W%=_BM}N%v1@ilE zQyTd0aXkn&zIWelYVb;Wva@f|_w%ef|Cj@>Hwa;Xil*wJBfzi-3l%kpLTxSX%^RaG zN2DK|&N-ln_Mj=>gI{D|8Ia(vSEGSAS{x#(_dO|>M#lb8D-pBM%^9ukvF@Sby!Z_4}l*h9>KT= zA62s6V1!|-oG?1mWa^LAI*v6at$XtD!7ton5sK#p3;Z@yt%2*~5dgV#=vBRXhU$e6}XKGS84RId6Vq z3pzLFZUxZ1z&%GI?&Nbor8-UZ+LFz zHl{2PA;L^xKUc!?4*Fo!kP!@!zOk0|v5Z#$IaPCNv`Y;Ui{>0EkAZFkH3HM(gA1@* z0eWgeCbQ3&ET=e-gBfS(It!EUwu6!uvEwEd*Y&I(6>gV6TnRxy?$^SRU$G+-KTl41BnQ&DFvR5E;=f-Yx(G9wUxIjV%_$>Kp zo?Zq(o+MzmUG+`zPhRe;!V{xE{!HY(+ngu0{6j@s@>pe5k)NTF8h0oTma9HL_dBCSpfRK%MO4 zF*1s8x|Ykc)B?6kJ!da@jT`VwIMjP1!!4XgGqDzh7Sz=}2xNi^i$qTJb4h=+@!FBz ztx-SS44>oRLFK(J^jv&?8HgAbt`-N;1Xn}t4C+U&q8_OJ;g)|E0MN`R5=rU;WF2kO z9P8qSGHjTLYc6yRVOtvthAca6?1y4v^LVauLq+Zl1GFp6`_-thJUJd}7iZfQ=xTgo zx1jvrx;zXwP6A&yi6wj&(dgtn${`t)wFdJ^hB@3L@?;U?GSCJMqlHDbn}Iq*Wn!ASjZaCb}XAelM1;eHbU~w;dQN8BEs56$jF~G}Z10;?@6%=d=5!@?F&w%`K?I zO-p<(D{qA%jE=#)J$3?DXX5%eDKA-^5-?Zdqu$dan$(>kAp{?VuVa8eWtHU~qlUEv zcJt7hH)U!b`B_(m3QcQ{6@l-UnMV_yZ`9PwFM~$xE{O}!w!g!=_CJXTeaNmyl?VwQ z=WmCP%hU?zXv-vRJTc&x%0o7QhiryFrxfP~2-Zv0oCYXP&j)u1qiP~$j()_S97|I} zIyG66*(QVr?$0#O@`d8f`$*JVK~47#{>7+Dba0blR>Y;<yMF zj7$QzhH*^zzIN$6Z=}}G-{HJpn~N6*xYVC+zdrXx_t$yuK0aG+`TcebzNsyPSi~;w zna-Z{EE5{G;6Kukcw5YArgVzGFRn&z66~EWeE0FZR;o;f5G{BG#^-P@iWnuHVBjC4 z7PIcB{kP=GW?PBbNsW$(%WE1E>LW65I|vsU1>B+K$o09k6v0lu`|Dp}`N2$e5RQ*# zESvd_ZoTcJ9%2>MJO1?Dy`oM*tg-Pb4*P^hyCy(1hVdJA<}wiVM-)WVS9vCXQr{>H zD-gw@3abV4SpJPaiwVyV%M1I|Xb*8xZTsp1a-u8EbI>T;Ooip`Asyk-)y;^Phyvk> zs?c|0;exnYeT`>?+yhe$MaV3(>!eYcSZ@8{sveUNr7Xy{9c+T=zhcX*DxeSPgdou@ zRHJLek!GRcUF)8dwF&bX;H>z`4f3WF`pY3y>p`iv13^wJ~6w^IAK&QD)maCo`-u==aA z7~^n38TnTq_|DDiu-l|E!tH;rymT$;&;DTUa%K3$uuPpIdhhZ=Ld&|-X2&BA2&+2E z*cew4_pVe$F|MbESYG*|fPEQBLH{zCe^Z~}86ExAIedf(g%n=ss+Ui&0=1V2OOAF9 zi20vL;o|<5GH~OId;NZk>pDp&TJjL4-C1*ea7QysQQ>&#Q<(*+I=(invTP4{_*a>3 z_K_FJT&{GAH9emE>-2p!(e^(h=8J|AXzxS#4Tlcs%Xc!dRfAIgPTR}jXB37SBfwoZ zV_hl&Sf(<{u$%RJ7AfdUzCw|r)UP&LZUcP0lvK6IkQitGFQ_76#B6OtzqUoxv4e5u z&rY6S;wx8XL)2yv((%~MLy{ykBYSj&G>d>-M#z*LN6bD)EH1$t^8d60{R6+i{!oOR z5Ga1$1I)xj$ynRryQv^&HOh0X=UnnyG@%q6tuLLkhEs0v3u-;UiQcBVRf~++QhlKI z{g5OB`UEOf;*2aX0#ErsMG;(@h+UFw4QYlSS3SBx_WdSlgOEzZD#NorNe;66ZzR~zpuB*I-XGiDKe`Fw`&41>)> zeuKZq%A^l0@@MSqb{K6g3-8v*{>8s&5i|BGJn1tH_uGMsQ;&qe18(#>SmoxDKS>KZ zjuuDC?vL_+U4`y3fB#(LP%YAJ+etb=NTUjL#m^1-%{DFk$QU|u={rXB_t8mt)=MD#9)uL&88(u5?>BHDFS zWb2WhACUq`Mb$t_;@y2UZ}C5X1_I`a}I&u5~J@U%^4v2W_YUQf_O}b4%-{85;BbLcRfS z1p~hi#@p5bHDNibC$LDd@90H6&!r;x>aI_G){%xUN$X1k)Mvm1{2~7FT|)nWM1Hic z@I50bye@#ID~5xBN#Z5nU=;yQUOI^2o5}v9ze@MusP6|L+}F-}*#5e%Se;m3KgWZx z8h&@^h8?;PH{pOgw;}oIvpq8^=TN+m@<=v_pRVX%B496lQhdZ=&3WOfVtL<^h)uNCnVJa6E*Jei{Ys@yvx!LG?V7iB`*xRrSB<`o7Tj&kkT=#eIVJtfr^MC?Y(gO z(hONeT(wp(Og#{KY|rH{5)TN$n;A%hNn*X6L(c;Vq}q!&MD;jcp&B?7!3LrMhG=n5 z#Owfq3lY6l3qcPEZNa7OY;UXFSFNeVsnBGK$W~&k@5V{uj)On!G(JnM7H|He6fHuoFDJrDKn(BFG<>`&fN?L ztvDvasFUxkg{0`ivR(Z45)r=nu1SgtT=<7RpFCAx?|{)QGbOMMl%)6EsC%ynxnJv0Ybjq*e)-9IaZ%S$hF*}ET=Q+MVo#p^TMrK|N8!?_8@ znaki{HdBbOsHIzD#*<&*2Ln1~qV=QF@o9B|7lL4Ha1L`H<+B|v#U-s?D^583YHJj+ zC5>1^i1IEUB_Ay-I3;$p4#u6ub9a)eXyhKu(YvOgJNvcxg~>je8ChIBwSt z-wY@*mR9RR2(K>@ZG)5EmaFI7rExvwSALh1Ov*e5Kv&cGGftMBS(eJXP+8eidHr`~t;yAEC&5KO zyUNPW&n_3}nB)cEVg3l|KmqxR9~UxT^=u8c2(HBMp;72_g{2LJ@;$n66VKrRF&lLH z2Sp1jfqi+G(wwdp*CK`e#X_2{!q*UEjw|sSkBpWsu%2i< zbwtWQd7hLLWa7)M>al}cSK)s!`P!wbOVP6CA|c0HbK`$VOG1y-YjVRP_cUiuArEzK z?bq?xFA(?hb;}^*SID}7H4p>reOdAl#8E_KP+>8%O&|jnM$&pPJFPQsn6wD5Affwv zO6!(w`Bu;`v0mQp^xO zu^1*v7WFuE{#*^nV6? z(p%dUU8jTigE%c5tkAAEDHA9gA93jqB02IN92y}N)nxeaFKica$zw6<26Wu{U1+N( zAYcJ5zTQ;Bh!(2jd6mrGgSabg#oI-*{tOiSeOothgU|Eg86N26T15%$ z%Won7SwH^o%q_@|r(nPM1&lqi|v zankfO$2XYXC_-)-HcFDAawfx9e41Z%}Ea!T3^JV_3M9V|thA9jV(cGRCn=~VX^o>3bI zrke%A+{Sln2dy4K5#yhzvs;Hk8A=?1q7d|_L)inFbN)9-sluk0LAop0Bo^B@SK2xA z$fY*ypFVoZbGT5+9!Dufi9IAg*kdgd7iqu z%71@!xZWWWVE9q+lj>CSjdql)oKf*yzc=vy@uM7RgZeh#zJq@ggjp>S{8=igJmwQQdYW`UI=|E1+UjsKCLtwr`Bl-8~-&a_& zd-<~3ejA5LZzCYSbwq~Z20+8Bd!HONa?L93n%1A9S#-1=TH@4yRX+2vQf<+%T9)*& z_rh~d8ZXA)dx8JUJp+XN3SP~({8OXsZUBgmcQQ3^#yg^=+mc0M*v_%X((QtQBCr{RY8 z#TMb^HX0@*^7Rt2-@qj*uNYa$@MuoI0CF^JL3obII=Gh&BX3r?8vh?f_Z?03|HlCw zmwT^qmn(bkS+2dg_ZpWF*(2E@>6&R8_j0dwT{A0PBUuS4qX^duiJ}m)GK#)drBe5I zfB%0z=X1{Ie9rs*KCjQ~^>{XQ_}f}P;mI9|LVVV6I4$cr2rTPNsST<~DG8}{Q2TMT zihVdTvS6m$p90n2Z2JyFHH`Or1RO?gjhgi~4hL4&Py|2M!9N4M3`6$`Py^?CqZy~W z1bIPXi+XLNX6lPoleo~O%bl`ON8sMkb^!Q_gi;6+3Rck_wj0W zsp1$;Ze}hsdX92eu=q;So*!Hhx0u>yZ!;W&@7H~;0Y9VQv^y!Ulyb=qHMpf#DRFI2 zs-4VjYX8SOc5d8muzhR#8M=z6Ez^7OMbntq@AX6bp3v`fnCV|tY?{29Lag>nU zefLuqF7o)#ocaW%W5v?(>HTxOZ{k?121$L>Y`AVTL1#@_kQ8F)Z)}3uAFg8X(X;9M7v!jK}-GNSA z6tvVB%_&6GsLPkqu;M%N;$cOpsVifJGC;O_C{HRWVrp2=tS{MXA>foQv-(GEZioO+ zNp6z+`1})7zxcj2D9s0-y6SH+zqrQN0Kez8gNEH0xN82ysTw%Q=unGTPl8?kYBO)P zU+-T2N}=05lhX}|WTjMz!ZpYStrZnT&a2oB{b4g6RQ73ku1oI&vC>yO3@z(Fd!2)e z>D4T!b75qG=U#zMc#^Z!Le|8tlj)|j*Nd-}oM#1WJv3!(zcD8V(Ad>#^{S^J1m&0t zo-4IjNP3oCV*e?24iJdGKS}yg3lrL{wKC;;OHBs|3!bX8K9~MBzdq)H>M3UG{M6f` z5i&rc`&vWYJJsa(u-%EZ;_U&XA+-52_qDAN``!|&Uu?41gMpq87eEW znQ2sZ7MWF4yg0iIdXyg97}#B>-PU*hT2P?qd_LIZ5J6y&X=}ir;g`HMTQi|s0TQ=% z8!rAbIGa{|UeDbhD`Q}8cdu(^2_t56E)pz0^u#<-tc@;P4X%EizrE9A^C_j^Pc{w{a>wGz<6 z@`i2M78>K&>u3``z9oh|CPgz?7jw#@j9(O3AUOJMpGnIrj&-dfoo@WMkCrJ zM5}W$Kr%ni+SI>u?lAwof|gyN$z%nELuh~~BLs}3A7Gdi4Sq(en-(uF$ZyIyccx}&(1qLX z3SSpnCKmo=_YCTuJ`BR%mbjK?<1F25Xe}bbQ#q{7t0$8x2=*^4=DwgBAaT@erFk~0 znQLuBY?0@(UH|hGTgb}eE2_$W`?-Y*FzT!MFHh+kMy-xOUdr|3Kh|$duF<#3`2OC$Y&1(r zdj`pcgohAbp;kZ_|FC`{+!8TX{8;{a{K~%5gVOMf@61ywckuNFW%2n$x|#exYS~b- zK;)jP#4*bk1xP>a4!Lbb6r=mKu6`Bufq&@Td7dtxKa*QFM_7JJ9!y?_AAl0pI-kRJ zmwWS?s*1>XLqu)y7>8&oj$P{0+ih>AH$6W>l2NP(CQU~Q>f28D-62FgYM(pY>H;uXK72C$urz}Rv4_7t zO4!WfUtx8lP(%jjr6W0^9i!SuP=^kMBcZgE=;?3pD|(uHtXPtO-MQ)Y$tA z{boC>YX48YNg8wTB`mZ;sjLzi?jjGr$6Bw&4s3>CA~~;5g4}>n`PLl4+&7ZQCWix4G!z`MclwpdOlI{_r-o%@1UXHVmt=%ucSrGD)4rortM6k4xr^s~;o?pTQoW#vU}J;6 zh>K1wGVgi@Q+y}<7YuQ0!ne$;eLwM(V!4xVLngbnd z=Gg}eyl4*Vl!8JA(slQ#CQ9PGuL5wrY}n?)CiERy#~YwN*cTe~rxVXZJQr)IS1Bvv zr8BRZzW9h`q37GYh+^?Ciip4JJaj5P+tr-AcKa@Xx!^W`Os#ek65_Jtj==imt}{dn`oR>l4UhdePz)Ulp_?t zTB7S%vgBvR_5<$TQ6et|d8CAJ7c7m+k@(}sTjvl5LIk0v;&0^eUlA&Q#(GyU`mRjQ z-LMtdNP*%jLK(;rieHX?`dK!slNPm-&_4y5NV@Kz3;!f2@UPd+sjPUUU!{NhDWpt-$u-FtEHp5jrkh z{VIG4HVKE!vdI3OgvmbS2U+<^_ruoLfI4wdeT|H8hY%rF=sVUjLqt+&y145N*a1d)|xjfXu;g>)D8<9gbni|ZmGj_MjyV$)?y;l1GpO6 zE9x{WOi_u&_q)nmrprVt&Ga1uYrBx8%b+wSh0B;X%1ocwH-VPlE1Lt_tv4&c?a z3QHT_u2Y~_B?zwhPE18deSZgBsvfZqrHUY%Ur8+zI$=}LmfSMcma|KSB9Dc83>=?A zuwGSv;2@d2eO4Z}QDB{KVeV`o_9?P$Ov)d`b-)X8s)vrTck8ae7Tr5REe$aZg!hKX z|9W{WW8v4k9?G)z{2D{9-BkYk2TtICv@dh}d$qTi-L*X;$9D8%IIY8krBGS zKk237E##jub;yAvB1wRiaSO>^%!L_79*=h3lcLi!;IHu5a9>^NQtpUD%Yl{ zBCy_Lf=8X{M5y4#OWvFw9e+udul%2a0uR^{*yyi#_cQy$1eVQuTmQhuKDLGD^3oR6 z7kd#8MUZVL<0wYtSX%Dbhqc&AUlo5vftASu>$AMm_(T&&2@_s{1<{tk(edv_yku{~ za6{fhNhMfI#i0uFh{}EackK-$%E}2s-6=#7J5eJCne%N-9R+Ufz%G8y&9!_3y=QXO z*6`N}Y;#Pe(o6p?3)iU~;V*k=(*u64d;Als@BH{)cQ`^L&AXpW*>OKgQsd4QxX0hk z4N8T_irWp!I|ha0gXZx*O^wKhwSI?sT*=8rllI=Rf1V5xgclTyN2&jMYG-?X+3JwY9LHwBnQ{e5FRc9}(yiZ~KKoJr6 zoA~O6rg|B=!2rOW+6yk=nuXl^2tv<>NsW`PoP9wJxJ%`}u~XV5=~ZwAK14OnxX0hi z!bO9p@H(b!eg+eI!EQeWb*FT*XOU}VNVSrw*2M))W6SQ_;$LVzynQaSy$hn1WVv1b zq{W3d_xSnHJl(g@h8?h?w?>EV}ppZ&{geR1qf{J`>$;BSSu z8BTszgbg@!;QSMd3_R}7`6s`IwBj7MaZhl8Su6D1_8fXa9HBTJ1Oca8qdbTBw zp_Tu^bt!8Gr{#=H#4C*FBa&L$jm3A>q2WOSmZxWNK8kkEbmK^)Uwia#c9(%uHK6>Y z<=*g*yK?hzFd?x7gt8M6-k?N%epUuqTyFD-fd58t-Tw9tlLQe~Uerj!T>i(8zw;^T zpKOee&MNchr47H)gif4zpZxDlV-`}eq19RnyPSpWTo!$`4wALuP1`e=Tjg%2a>D|P zU})~U>fkyv?o|+Cc~7up;f~!mc)_y#_9SdwGrvh{oV5dal=v#;-lEflfzO`Rpx0c@}@&z zdl3R!K7acoUH<>5ub#n_@o%3`Dv#aO&gq{fA4%PJe|EKg=Go{)2r8KjNXA^+>*#Lmxx092>Dh zOIWymG@w^{(MW;VQ)-BRelSjQwS7N~RpAXU`c@T#zq(h|poPmOSZZ1lGE3d!W&QeE z?W_I4Z&+VS+<&m-(Lk-BKM_d~y5s|f*_7`CO$Hl$?jJ@=f>v0OFx0iF{ZW~Y}6bp@4K~pUY*(H z#fABN7M^B5FKLw${r%hL499?r}!OSbLKi$dS2qLw@y`2RRQsaf)E zbZU-*?feybPIoY49hAth|MQ<2JIr4VP4kfnRefB|8rpU}1`vu2VA7#w)5k2FWv?7A zQ_#E>e;UmBP;4Y&Q!}nj$>5Ofpw85E{R}?e)!)PAXHPSP@uqF0FGo^qq@a*rMoEOa z%u?4+@m?WhyO&?i$--lJu9$0c7ko8mf1;EsRL^spoRiODJfaycYcSkO?g>~MNu3P< z@JpkGha_*l?RhbXv7)VbrdewknNFPoLInU5zEbrYxw|;&d{V>dIVPBOe&t zkzAGMzp$gyA{IM6_pmgga=lSMK=hTY@P+5y;3d{U$c%cYn*F_0=1i56w1VJ;f^?@@>ZYZgNjEF6&O*Se4vmJ;uu7WE)r(ntTG zK+>6@y~7`aTD^3i1WOO5nnwuL2u4UnOq`-7GMl9`tFidJ$TKxTd3HP|;1bEHoZ4vz z9RfI5$MQ-@ad~j4MyHvXM!XF+WW(0K;mN<@)eOy{khP@aDXaT$Pe;j}a==m(Y z#N=e_oqFV#jM6iWh?hl|)4O}X;j}Fl>w9N4LW897H?{}o(wBnQqLWSh1KOTnpeT!7 zY1_6xiuxND!be?aR~2?R&zcpV&UZING=#?3FP6U3sxYZd#dRtQxJRWyWZsm6ZsWJC zhP%Hui;KRjH#C#Bn(SoT4*i>Opg&yXe7o=Y&JlV%9>Q99@SBaBdVD64H>ce6TTb>( zS*uV8D{!=Ms^k`*j1VmcF7o11j@k;RjNT#47t?NbAt%DW<_Y)cz*3dL?)gBB#++3jH;3r;CaJUMl%1>Ybs*`L! zGU80aLP7`2!{;C2eP(Qx?cl}}k(9q?L<#oi;#Mau*rx?DxCT*ckZuxU+n5==4wk?O zx1UutfJpyiCJ~hh=EN~!SIZr4-Z}hSSC3;8-{2>%j~{BpD~XWHu@vnX6wm$LfN=iK z6q(a~Ss8<|ZHkp&2UlBoXb+_MMR&Q4d(vGKX0htwda9;^#p9{6{MJ0iV0Fxf(koXv z;a}k+`kn~xR@Xr%ng!M6S}Cn@DXam(DzfgHk#l=1Spahnhtkk>NIoJ7v8R37RmNb( zTr4E^i$F1q@0A}9HEP?zTo#JwlMsvdG9W9vWA<1LYJ~fcU_qF-C)WWqf{3kndj+gr zaf2GEwPP@^_+DOUgxi;RO>}Jt$0PJ$oS z2pMcYb;*-ht?@2P7w6z4NnAOhUU#08E*LtXs9aY2Gq@stN*|=#vH#gfXxkJ0zO6(~ zpHZW8QC5_h*RGoGnA!7zm{CIgVIVSVXFE3Hw5zP=zro>Ua z2f@xqj^~zhR);$XVslw@&q~O?i+aVZI-&-BWQgyc9JFB<__TGr-*nsGCYvZ{d`ep< zWIo)$Nq_4Fd2BxrxV=SS{gb?L%ka``MqPP^(hr3SsR6-!8gcl~&MD*Xe&e}S9BM$} z3~_4>zRx{^*&nmul?O5-hd;QC&HP_ys(?T68((?szqa&Mn@zR_H?(&Yl^yqjUdyj9 zlY1$3pY||#t$sUI0&7y zT$CKrm|lX1u>b@UNF&P3y04xBSabl`7TUNZaP!3IE9Qge%h&ff9m0d>2aB|aHKsnr zxXDQrbeNy}6L64zvc1no|GlpNwiuELsB1mZg@F6d9U#`*(7;SUuT5S!d(#FpKiKhLfQf?#W$0dTNqZFV3v2> zhazS@zNXm7mxPdq$4>CB$drp~VZ7s1?d>Wd^Yhv^=`lbkv+#+4vhjBrM>R-=0q zdnZFU>?VmbDrBcxqD{QfjlKR-0yrFef2j(ro^D2&Bt1{>Xm2p9o-+LE4`8OZotw*a z)=P1s_KXAoXqw<)mL5%WE}szf?*U*W0idydn$*!-Ku;H{?(b~w!}RqPd-6?afcKe^ zbTslEcP=Lk`LjV|LQyI8xGL$8YxQ}7QvN_^Ge#0499~6^fm2M%?E>=dU-e}0(1BFt7f3P_ktR!P4 zllWUI0s!c)*|dWCF@FaE_a@@d3b9oi&ON^dUh{Lmxa|*X}<`Z!sE)7ff+tF&#)xiHmgoh1nuGnlomzPyc@yp?p%dN9MWr}31m4__OyAvnq?{bw8_2_ zcFymLz`j3S&z~yLJ z@QVgpUd}hHfBEx8rxH5y4{gg{m~%10ZH&|p2uur!sF;5U@h(#&BsnQB}^faux{r z*tf}BsldxG5^6J^YLO2dv%F|TJ1|I%Bh5@F%zDeYyvq)eMA zS$f)u=pd#uN#eFO;^lOv_?~h@y~3#FVC@_-sL!2uVTUW3T{}6<*ed*%q3R$PYS)=8 z`351^ZpATk%9tDt2Qe^8q`*X=y)pQFEzu5-?Os($p3MyrB}Xd)Jr#kd>*VmQs=?%U zniVcN2qVja0dKjS3)-A`e2N#iJA`_#Q#JGB5tnb>hbDK|V7tC6+Ii@$w5V7EGEMAb zvZUvZ!y`tOMcL7M%el8egZPdI$D(1Abd*<|^76@*iv4W>C&!0v#EUKtbD?6_%-S)G5JW1L-2HbUVb5zzu=w`KM=$v4leY9* z%RoHtea=?u1?i@v1yYERw&)nU*1FKNC>VZ%rHz2ff6)lNh7*5b!Lvv{Rq&gqizDDg z5z$2h;rnXWJ#rH-bdML$a-_{&Aiy;B#9?cgPUK{Hq~ zBM;3@YqoB1AVmt23M~-6)O#;d$iF^+{B40qJnQ>y9cKIY>q zl43oHI{I6SU2lXCSmal&{xFXvEqjn_k<-uC>EixvGOr~S`GcuoKw_BUresEE1;GL5 zn~|8BSn2s;Y^7z<@4}U$`zMph@%^_umXpAsGbcW@$<%e47;6Oh>B6gcbzt!1WX5vk z?{K22-)io%^j%@_&w2k`GHEm1@($cyJeqJN}9%#Y=vYeG*VH z7~qwZVm#&eKrP2Sm?6e+y0_HQ^YPH;&z`q*V^Qwc2o_Z(K6 zIP!y1crIlg_~zniV#?r1T899UJeW_uwl}ZmOSI|m>tM5^6_P16#S07QO==S!-~4-r z`^pA5wibHb`Sj9FDbIAK8(Nj{>sh@ZDZCaH@o&4a=0&4p2(bvni0W0z#F5H$I74E$ zlbS2;il*TcZ5o!IzStl?Dlaxnfo{LO7yXUv%HDg&7WL$b?q?C;(5>o!$FetZDbCc8 z-1slaLtlsG!NgQ(j|up1KUhRqE4PRg!Wwvh+o3cgbyxy>WQ{_{R@-D6=}?%opUiy@yLmJPBk{ z{7C9UEzVE&g||ZPeS=0cM(n0aMzm%=EcT?t)f&>DarIkFaBt^?Jmd1*%Gu&u>Dzbt zJEU4+VpF-HTrv(y^Co-iW%zPbp2f3U;R?51AS>UT|LJftLdXCEcpXM6#lbygsJy)F z2K{{z$wa#PmP3Hv1~(pjKX)|6vX(snP7*tlso`jV&A_9|_vnrIAC<4{e()zudf+V6 zIpp_GTn|b-&X=!pgLTPHG=K?sD_Jm0^%6O1E5*wl7+KqBtFzsc`0a`gu&~CvdN059 zA4%d4MFy1CF>|p0$VlN@>wZP57Yi_oe6ZO83b4jMsyQ9FQ^oo-o%h2u@=O}r#ezWJ zRO`DwW3SIpYn@2y(S&%C$4JVTrQZBnH@(e_BopvQ^abTy+&w~SNXM(R#BWA-Z5$=Q zCXdMBwA66D==<{EH^3bwWxk2UvcH=HMMD7qE6KD4FXc9+H?*MV`4kS;4a=J>X6c=uUeq?CGu9QOOB-47T|}P-F#~&sQcP^#kcU~I}`U2-(8zeb#Fdq2bQ#n%RPl-76g?FxwiGZlUebLBCbV((lKKZT16tkyJdgnN%}dPlub{A%+Es* zRLYBR@dW{U(XP&FApcIuW0{GXYj5r~+>6(XZ1l>IF%^sppL_oB+g?SX(Mny?&;m5m zQ0(gB?$XQucDa|No+S~6@2lxfQu`xv6fU1UJm>Y;yjUcc>*?tI83%xvL=3l5H8J18 zkfMi4$FjAcGBGQH0k(R~EDT1fO!T86r^2l=%}wmu>V>gb3x3Rh zZHLf=3rQLdTI*$RM`NWU^SITQZw)R}fZqY!s!wWXU9MSc%mrdrwd-Jb`=k%qQmNjv zt2b&O#}zL5Qi0?4S5WIiW^sQt&!Jug%AAi4XE~lx1L(&i^Z-GjrzEcLq1MoY;jL-G z;9oK`4u6?B>{{K9+tpRJHOC=ts==RE(RiM=Y`3ewH8QWupti=`CfnYo>*U^eDqG)h z2PD_<@q0js+m9IVxVNuKOtwtEVu-v*h^MB5yfiEF9WD6RyK|;@3}Tq#W@B=};}8>P zMG>dZ7OM>(r3IAQv5x7Cf(Jmq(bSp?+X3f9KipB~wF)Qy-n~{o>h<4+rujc^jUVc_ zGE~|nf1ESfRQ=;%2>8B#u5$92Q%Hm!;YCq-GEfZHuBhgP=-myM{?aD%iz%t@uRhpy z7~A?_*Q0V~U2Tjf<>pKWLvWQOaZ+Rfx;G^HhpN-Q5cOqjV9Ky<>fFlBHt%(H<1p#W z*?9+vnDr@9Y!Z+8h8)1-(7_0-8Dn1;+cTPJ&65Qf?P@nWtTR4h53hWsw>UIJwfXQ> zV~H^ke#&5$k8Yb36_iYyxmoJ2wVEN5ueHYQ5rC8Kd-`cFaj(JT#pGjR&=#?1+TRN!cw{qx7 z^x64eXyQPG5dPcC)NIi8VV>u#(8wKvAj(4;b09GIgNMiq+n@fN`c~&Ora3zvSv57H zm;a%;;uP$o1Pa4_~n9UdTWZu`Ql!p!RJczP>WiQw(gomsdVNu8|})R&5)wM^tN zLZZ3F5oFegJ*+LY- z3#BiQOHl;LlZnd4cAl{=!mqzrfVUh86#y|uW3cVq@>oT6n^c#3=uK&&v-2-5k$Gkv zS~5K^3fGh|@=M80PR_Xy;UateBp~hCP-^{;Q&IwU;knO7XHydCxKng%Ibf7)S#^Qb zXR@W%l4qHFpfq2<^@y?HAv$Mr0>k}^UE)NYlCxm_^xewW0I9)(VU8ct9|8e>Qvk@t zR9y)$|x#oAZXW=Wg_-_@aeqqdT2?ax( z34E!3nv!rS^L+%7Pzll>R`$&)O=XXl@`_2ZkCMvj452qq?U77*8o9$%nZt0C?275A z3=ggE%0EK(-6bBVJysqW`Y6@XZMy*H8;%>i-opQE-~=Z0T;HfW>(FUJ3L3Qs80QxO z-x1>tOsSP|guh)vk0MBVL;CIc;7Nd`_WJXc0#I+d+HLnIW z3`j+HkB`Io{xE+>=!x2&?+(jpE}p>ifA8LCl(q|8H6qjJH+_V{2zrfg%r?|reC8|) zoBQNU=6K~8dGLEJD{)!DI4i>|r|#Is&wqOR-Z;26z>|?OeW39jdk_^esXoi=GYgT+K@e zT6$Oav)(_F(?PIIs=}9Drsu+`A_Y~c>%o@2r6Et0g{x1+99S{*1<{;rNM)tS284(w zo$7s(F#}%Fay7Gm_finR*Ps{VWb!*#3K_{`*M|I{s?l$Id%`YZK12_9bYzZ+bh}%EMj`G z;LZyf@%F(qz4C9=IR3kP!|kIhNUymeg<Y#H}!CO+Bw;7l*c65eo4&DRS zhbwyfPpq9>lT^doE9b_u_e+M9ne;*?URach4ajTt%h@vSyQqV|{l(HD{Z7ZJNm8@e z^>gop*okKJkSiBoYD=!FenJNl*3HCR;(cVs2M1=B@P0F(QH!77U347)`F2(|yMUU= zMJrUfHh9pqamiM2z(g=ruP6mo^u}ZdD6(_kqql5aY=Bjn9rbtFC6QnrPea$zgB)m1 z14~J1=Ah7J(?GC@DvT%D_rFXUy6B_n36DBeK>ZkZ_b--fB1Ox5Bx9!VM}?IA$Z`Xb zpc6xwg=BfEVhsXa4dN%P`Y`f=7=3quP7Gb&!GU{%!*qxJ<#mqr!7|Jd);7c&qsJ%W zT!HmY{(Afg?SPTiW82&V=;8_cLPVJkim@1jcvTQkSVs3KCcL-NI<047ZWb^a)g@@zvys`HK@g! z=uDd}U{K!g(V5~RdjVLpkEZ>B7I!RAtz4LAemd)z)5pB(9sP2R{fm<3%Br-!Ab?yT zrcjE#&3ZkKiq-b1N)Ke_^$l2jVQ{E~2Hs=EqRMQ}`(P%Yeo$`2=mxr)NIKZ{i;7N< zmBlPNdG{;I-@}#B_0(}+#Rl}oCtc;)^})H_4?d`y2|L~RY{Bxm9xNx-Z!024)Z>~n zyXA~^W}C9!h&fI-mbZ4(sZp5sOj9Sk4q3&;I0yT$JLUu8Pl_?BexI#vl+`hw!tAEY zo{Bhm1ExPGcwgdp)Q7^Z!n$D^?t0+@ky&^*4G+5Unk_tY17{>(Z!T}oo&iP;4E#b% zkF2V+1p8!OlyO*hxK&e4-iQ%rch^XBOS$B8OX80tNVN>3oEZFc!TH>2b7iyn(_d1g zGRr4bE8?0dKb_^f>V&XV27qF5N_S^Kuy93PhiJ0+22(9?dXad;U;`UGiE_2Mq-<_z z4o1rp_3-qFnRTOls7_<*lAO8t0IS%7f_>Q~w@H8L@sQR0hpE5)LO0F^_VtJErX;<( z6luPG@s@Ve_Zz&jms5^n=x~)Wj@zf z-A?%+M0mB3l+I0dP4Syqr&xGn^11K&5FfWC*Pzbb2vfXikf-B7y(6FMB5ruz26M%XIDV+uE81{zbd%?3cFBU zBF+ARGt^c6Vf2lZ&hpD+wP9*4^`APFt8IA#q}k)-0G&{~ZpuctJjlS-w$0z-OfTj% zF4RpihrXEd^1wj{M;sIu>^seV>R(#F=b#Y}yM(I3E}0$Wv4gJ0>=$tiQP^wz#4zzY z!@{@`e#Z0&*SS|FI5~%Y`M@3gAYqNgmq zLK`C&$kuLBCdoupGW}20Vb=AbC`MQPp)GjW6#pWN@$k&s9o8#X~ie4tN zi9$49kQG^ILZ2*}op|Op_J?^dV{bJTr#5XRHwu@0b84$#zO2Vvo{`MNgxDt4z9zT+ z@b)sFBOeQmGM^O_^O&Wes3NL(E7xPW$LQk{ZzAC~C*mjj=z#pdd(W#~CZk=#1BFb~ z&!Pmbu9y3p68!7;`mfRRI$O!7)m3~#2wJLu{SutU6b71=hcLk@#wf7J444eijcDJ{ z1Fn??i_N?>XhGN7lCbZdS3mfli6(zAdr`>z&Zlo!8OQ>(h$@0;yoHVWgvTSu;(t{; z*f>>ol^`{YYBgsDakF#J#XT5{7lSYeEE%U+4bxc}gv}R)%qAy&b_&>ZFwtciaXEmu zRCKc(KoPSK*Lj7!Sci$9;RB7BxuYs(OHG#@R^DQ{hMUphD6BhEh9wxi--EzX1PwWb zuChJv-dNd4x$rweNT}AVFH&N(rMrzHlX;c70ZH&+>P!ZwZ@|~?oe~dVaO9ypTxaPT z=7cl*fMlXSCX+C-_tg{*c<%VwbXw6RKcm5?zoMnZB@y-Ud{iEF-&9LsqK!_Mk75D& zo-rk!83}X=0n|+Gd~JFpi%i>Tf)n^OT>|N5_(KO4f=Dk~fkAgJK7|=MaA`axQZ3IE zz6`xMG#y^|D`!B(4xK_KxGoK9Mqkm=Y5hKu%@XniB!0&iIatqY`@}0-WIY~_Rc9T?TjXjfG!v5+fUJy;n%w*R!X zw%J^NKnKUy0iwN0P7+*rtriS14^4DPF}Bc3#3+wneq8uO|FZU~ATtY%hrN7oDC&Zz z+p|a>b4l5u_Z>;7MEY@fxbr^2coyqnyCgnl;d|?G1evU@o-EU$eXq5TeQD3JVMI%F zz+{$gjK{kWmrQYVu|`Y$#Q|FmjWyrzAj*#=!6Mw4mM3$Qifr&CoXylZ<70MzQ}Vrv zejU0@;>!8KNtfgcibVtFY^8$@p^&-C__-x8m%d z^((fqIlL1%O=5p2ZZ6G^k>0@?7QMN2EWjNqVY2g93(%YIi(XsK$7Som}ts? zi7x;p2r!VyN|lfx$xJY>w~*1jxiy$3aH<$neT;XD3l!85754urWB>M?1UwLgz#7Iw z&x>teoW$z76YNT($>Q;8a>qCt!H?t6bO93*@}=ZEmfrUaw}rfC3M~>SFVcKthy&mk$+pzVtdxzC|>5`5GK2>kB~ z)}1cN(;pdZ(EDkx^)C3Nb=oa(`@$ZfKB=b8bkNrL4?0kGSl%&v&|0W+$DRw<02nA$_q&&K$T(ze^jzq!B1Ma^w|(AmTF1r=|1r&!p1Amw?sbOw`|-5h z3%5Y}LmNd;oDmW^{5<9bdSJ<}hf#x$cRAG!xcJ1Y`kDob1+d1-{I+gkkLk_!*Iczu zi;SdXC(tIcL2r=V*p^1D)>_hL&Xj^{>sr~{Y^zqj@n@=m@3?I*)6L~Yf4V)_%-MO4 za9lDA?~WaY{`hR6X;6yZqN}m%H%bt1Ikm}nvu&9Ud>pg5U&WjQAT55XeyTfQCmw$~ zKi%z;#M_Lf3Jf z&V8(&f(P$(tWr)xG~%v)%uJM@oN0vp$_eQ8N`1nAnW(R>cq%qZZ@c^O7hjljol~9b z(;H8N3~#!3#@!ojB)G-=wzmuz3cv66lw%j7X?f+5Cmt#?_|&H9{)O(FzkWQLzgl;( zkHB~uy+zvdOcK7WpZRpp=UMoQy-%h4OcwS|&(^~JjJ8~9fs2a%0Dq28dj#NqaB!Z$ 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ç}R2$|&vi2@U> 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 z⪻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ð_gpP&6fs3MHL4-5t(*Q}2QbaDateFvx^Z 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%0AT9!ZA2Rph9e$O!T9!yK9+NmRHmHpf z48N4MhR8XMe4+J$tA*6^DBg2S?b^6{_PA!n&gwWx@%`VgBO_BlG-A^A4 zvE6Sx>2_lB%(Y3e6{K*?q}S-A&+4SFPEDuGl>dpTfb7Nz->IOwsjH(?*YLNGEKfOS z3H5eAZi;^OPN0p^`~FCnK05kawa6{@@VY7BJYRb{{k=&@W09!Sv|ZR>`z%fD|7`qzy1a~x@Vg2 zw_$m_;GVJ38zS1etQN)3udEv|&qmz{)9l7m!s!wv$k*Ax_F)c9|l4g=y?^IDY( zDZ-CFb^EenJSTB-PU`xc^hqNb)~MXQIYq%7QE7ht?s?Ud^UQ-#y34xj9BJPk*qAp= zJqM~$PJ-_45!K;&s%?H{kg=fh5{>7L4rJkt3Up@49%-e5meE|C2w1 zLQx>L8Baz$HAW=SVOwZI`gEAz95NyaVX7^p!I9Y7vk3YwNJ&s400niA8adG0<>G3f Ytdjw|eG0>0?Bo*j{pDw diff --git a/regression_gaussian_v1.png b/regression_gaussian_v1.png deleted file mode 100644 index 6fd68c5f07202f09b997dbfe3fe3582fcc6220d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41478 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -feat: 1 - - -< 3.11 - - -feat: 1 - - -< 0.601 - - -feat: 1 - - -< 3.9 - - -feat: 1 - - -< 0.307 - - -feat: 1 - - -< 2.48 - - -feat: 1 - - -< 3.46 - - -feat: 1 - - -< 4.29 - - -pred: -0.000571 - - -pred: 0.00501 - - -pred: 0.0137 - - -pred: 0.00268 - - -pred: -0.00581 - - -pred: -0.0119 - - -pred: -0.0174 - - -pred: -0.0218 - - From 777b6b7fe0497d28a51018faf44cfe0bb23ee1be Mon Sep 17 00:00:00 2001 From: "jeremie.db" Date: Mon, 10 Aug 2020 00:59:04 -0400 Subject: [PATCH 24/29] prepare for v0.5.0 gpu support --- Project.toml | 2 +- experiments/random.jl | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Project.toml b/Project.toml index 6f415b92..46abe773 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "EvoTrees" uuid = "f6006082-12f8-11e9-0c9c-0d5d367ab1e5" authors = ["jeremiedb "] -version = "0.4.9" +version = "0.5.0" [deps] CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" diff --git a/experiments/random.jl b/experiments/random.jl index f8665401..747916cc 100644 --- a/experiments/random.jl +++ b/experiments/random.jl @@ -79,7 +79,10 @@ params1 = EvoTreeGaussian(T=Float32, @time model = EvoTrees.fit_evotree_gpu(params1, X_train, Y_train); -# xgboost benchmark + +############################ +# xgboost +############################ using XGBoost num_round = 100 param = ["max_depth" => 5, From 38e5d44de839c9bfe968bb9320b8f537090c2253 Mon Sep 17 00:00:00 2001 From: "jeremie.db" Date: Mon, 10 Aug 2020 01:04:24 -0400 Subject: [PATCH 25/29] fixes --- .travis.yml | 2 +- README.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4ce629ea..019d110b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ language: julia julia: - nightly - 1.0 - - 1.4 + - 1.5 matrix: fast_finish: true diff --git a/README.md b/README.md index 7bd633df..ad12b8e4 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![Build Status](https://travis-ci.org/Evovest/EvoTrees.jl.svg?branch=master)](https://travis-ci.org/Evovest/EvoTrees.jl) A Julia implementation of boosted trees. -Efficient histogram based algorithm with support for conventional and extended loss (notably multi-target objectives such as max likelihood methods). +Efficient histogram based algorithm with support for multiple loss functions (notably multi-target objectives such as max likelihood methods). [R binding available](https://github.com/Evovest/EvoTrees) @@ -17,9 +17,9 @@ Currently supports: - multiclassification (softmax) - Gaussian (max likelihood) +Input features is expected to be `Matrix{Float64/Float32}`. User friendly format conversion to be done (or see integration with MLJ). -Input features is expected to be `Matrix{Float64}`. User friendly format conversion to be done. -Next priority: GPU support. +An experimental GPU support is now provided for linear and Gaussian objective functions. ## Installation From 3c5727e047e568ce8f7d83ef1e99fca2b24c19ba Mon Sep 17 00:00:00 2001 From: "jeremie.db" Date: Mon, 10 Aug 2020 01:06:14 -0400 Subject: [PATCH 26/29] fix support to Julia 1.4 as per CUDA.jl requirement --- .travis.yml | 2 +- Project.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 019d110b..ee53ee28 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ language: julia julia: - nightly - - 1.0 - 1.5 + - 1.4 matrix: fast_finish: true diff --git a/Project.toml b/Project.toml index 46abe773..62b9afba 100644 --- a/Project.toml +++ b/Project.toml @@ -20,7 +20,7 @@ Distributions = "0.22, 0.23" MLJModelInterface = "0.3" StaticArrays = "0.12" StatsBase = "0.32, 0.33" -julia = "1" +julia = "1.4" [extras] MLJBase = "a7f614a8-145f-11e9-1d2a-a57a1082229d" From 6faccfd52da1e23ebd163d5792e16ac1a11ddba5 Mon Sep 17 00:00:00 2001 From: "jeremie.db" Date: Mon, 10 Aug 2020 01:27:22 -0400 Subject: [PATCH 27/29] cleanup --- experiments/random.jl | 11 +++++++---- src/fit_gpu.jl | 42 +++++++++++++++++++++--------------------- src/predict_gpu.jl | 10 +++++----- test/gpu_base.jl | 2 +- 4 files changed, 34 insertions(+), 31 deletions(-) diff --git a/experiments/random.jl b/experiments/random.jl index 747916cc..92f6d229 100644 --- a/experiments/random.jl +++ b/experiments/random.jl @@ -40,7 +40,10 @@ params1 = EvoTreeRegressor(T=Float32, @time pred_train = predict(model, X_train) @time gain = importance(model, 1:100) -params1 = EvoTreeGaussian(T=Float32, +############################# +# CPU - linear +############################# +params1 = EvoTreeGaussian(T=Float64, loss=:gaussian, metric=:none, nrounds=100, λ = 1.0, γ=0.1, η=0.1, @@ -52,9 +55,9 @@ params1 = EvoTreeGaussian(T=Float32, # GPU ################################ # train model -params1 = EvoTreeRegressor( +params1 = EvoTreeRegressor(T=Float64, loss=:linear, metric=:none, - nrounds=200, + nrounds=100, λ = 1.0, γ=0.1, η=0.1, max_depth = 6, min_weight = 1.0, rowsample=0.5, colsample=0.5, nbins=32) @@ -70,7 +73,7 @@ mean(pred_train) ################################ # GPU - Gaussian ################################ -params1 = EvoTreeGaussian(T=Float32, +params1 = EvoTreeGaussian(T=Float64, loss=:gaussian, metric=:none, nrounds=100, λ = 1.0, γ=0.1, η=0.1, diff --git a/src/fit_gpu.jl b/src/fit_gpu.jl index 773da171..2e458625 100644 --- a/src/fit_gpu.jl +++ b/src/fit_gpu.jl @@ -6,36 +6,36 @@ function init_evotree_gpu(params::EvoTypes{T,U,S}, levels = "" X = convert(Matrix{T}, X) if typeof(params.loss) == Logistic - Y = Float32.(Y) + Y = T.(Y) μ = logit(mean(Y)) elseif typeof(params.loss) == Poisson - Y = Float32.(Y) + Y = T.(Y) μ = fill(log(mean(Y)), 1) elseif typeof(params.loss) == Softmax if typeof(Y) <: AbstractCategoricalVector levels = CategoricalArray(CategoricalArrays.levels(Y)) K = length(levels) - μ = zeros(Float32, K) + μ = zeros(T, K) Y = MLJModelInterface.int.(Y) else levels = CategoricalArray(sort(unique(Y))) K = length(levels) - μ = zeros(Float32, K) + μ = zeros(T, K) Y = UInt32.(Y) end elseif typeof(params.loss) == Gaussian K = 2 - Y = CuArray(Float32.(Y)) + Y = CuArray(T.(Y)) μ = [mean(Y), log(std(Y))] else - Y = CuArray(Float32.(Y)) + Y = CuArray(T.(Y)) μ = [mean(Y)] end # initialize preds X_size = size(X) - pred_cpu = zeros(Float32, X_size[1], K) - pred = CUDA.zeros(Float32, X_size[1], K) + pred_cpu = zeros(T, X_size[1], K) + pred = CUDA.zeros(T, X_size[1], K) pred_cpu .= μ' pred .= CuArray(μ)' @@ -46,8 +46,8 @@ function init_evotree_gpu(params::EvoTypes{T,U,S}, 𝑗_ = collect(1:X_size[2]) # initialize gradients and weights - δ, δ² = CUDA.zeros(X_size[1], K), CUDA.zeros(X_size[1], K) - 𝑤 = CUDA.ones(X_size[1]) + δ, δ² = CUDA.zeros(T, X_size[1], K), CUDA.zeros(T, X_size[1], K) + 𝑤 = CUDA.ones(T, X_size[1]) # binarize data into quantiles edges = get_edges(X, params.nbins) @@ -55,19 +55,19 @@ function init_evotree_gpu(params::EvoTypes{T,U,S}, X_bin = CuArray(Int.(X_bin_cpu)) # CuArray indexing not supporting UInt8 # initializde histograms - hist_δ = [CUDA.zeros(params.nbins, K, X_size[2]) for i in 1:2^params.max_depth-1] - hist_δ² = [CUDA.zeros(params.nbins, K, X_size[2]) for i in 1:2^params.max_depth-1] - hist_𝑤 = [CUDA.zeros(params.nbins, X_size[2]) for i in 1:2^params.max_depth-1] + hist_δ = [CUDA.zeros(T, params.nbins, K, X_size[2]) for i in 1:2^params.max_depth-1] + hist_δ² = [CUDA.zeros(T, params.nbins, K, X_size[2]) for i in 1:2^params.max_depth-1] + hist_𝑤 = [CUDA.zeros(T, params.nbins, X_size[2]) for i in 1:2^params.max_depth-1] # initialize train nodes - train_nodes = Vector{TrainNode_gpu{Float32, Int64}}(undef, 2^params.max_depth-1) + train_nodes = Vector{TrainNode_gpu{T, Int64}}(undef, 2^params.max_depth-1) for node in 1:2^params.max_depth-1 - train_nodes[node] = TrainNode_gpu(0, 0, zeros(Float32, K), zeros(Float32, K), Float32(-Inf), Float32(-Inf), [0], [0]) + train_nodes[node] = TrainNode_gpu(0, 0, zeros(T, K), zeros(T, K), T(-Inf), T(-Inf), [0], [0]) end - splits = Vector{SplitInfo_gpu{Float32, Int64}}(undef, X_size[2]) + splits = Vector{SplitInfo_gpu{T, Int64}}(undef, X_size[2]) for feat in 𝑗_ - splits[feat] = SplitInfo_gpu{Float32, Int}(Float32(-Inf), zeros(Float32,K), zeros(Float32,K), zero(Float32), zeros(Float32,K), zeros(Float32,K), zero(Float32), Float32(-Inf), Float32(-Inf), 0, feat, 0.0) + splits[feat] = SplitInfo_gpu{T, Int}(T(-Inf), zeros(T,K), zeros(T,K), zero(T), zeros(T,K), zeros(T,K), zero(T), T(-Inf), T(-Inf), 0, feat, 0.0) end cache = (params=deepcopy(params), @@ -85,7 +85,7 @@ function init_evotree_gpu(params::EvoTypes{T,U,S}, end -function grow_evotree_gpu!(evotree::GBTree_gpu, cache; verbosity=1) +function grow_evotree_gpu!(evotree::GBTree_gpu{T,S}, cache; verbosity=1) where {T,S} # initialize from cache params = evotree.params @@ -102,7 +102,7 @@ function grow_evotree_gpu!(evotree::GBTree_gpu, cache; verbosity=1) 𝑗 = cache.𝑗_[sample(params.rng, cache.𝑗_, ceil(Int, params.colsample * X_size[2]), replace=false, ordered=true)] # reset gain to -Inf for feat in cache.𝑗_ - splits[feat].gain = Float32(-Inf) + splits[feat].gain = T(-Inf) end # build a new tree @@ -129,10 +129,10 @@ end # grow a single tree function grow_tree_gpu(δ, δ², 𝑤, hist_δ, hist_δ², hist_𝑤, - params::EvoTypes, K, + params::EvoTypes{T,U,S}, K, train_nodes::Vector{TrainNode_gpu{T,S}}, splits::Vector{SplitInfo_gpu{T,Int}}, - edges, X_bin, X_bin_cpu) where {R<:Real, T<:AbstractFloat, S<:Int} + edges, X_bin, X_bin_cpu) where {T,U,S} active_id = ones(Int, 1) leaf_count = one(Int) diff --git a/src/predict_gpu.jl b/src/predict_gpu.jl index b793c5af..2520192c 100644 --- a/src/predict_gpu.jl +++ b/src/predict_gpu.jl @@ -1,5 +1,5 @@ # prediction from single tree - assign each observation to its final leaf -function predict_gpu!(pred::AbstractMatrix, tree::Tree_gpu, X::AbstractMatrix{T}) where {T<:Real} +function predict_gpu!(pred::AbstractMatrix{T}, tree::Tree_gpu{T,S}, X::AbstractMatrix) where {T,S} @inbounds @threads for i in 1:size(X,1) K = length(tree.nodes[1].pred) id = 1 @@ -20,16 +20,16 @@ function predict_gpu!(pred::AbstractMatrix, tree::Tree_gpu, X::AbstractMatrix{T} end # prediction from single tree - assign each observation to its final leaf -function predict_gpu(tree::Tree_gpu, X::AbstractMatrix{T}, K) where T<:Real - pred = zeros(Float32, size(X, 1), K) +function predict_gpu(tree::Tree_gpu{T,S}, X::AbstractMatrix, K) where {T,S} + pred = zeros(T, size(X, 1), K) predict_gpu!(pred, tree, X) return pred end # prediction from single tree - assign each observation to its final leaf -function predict_gpu(model::GBTree_gpu, X::AbstractMatrix{T}) where T<:Real +function predict_gpu(model::GBTree_gpu{T,S}, X::AbstractMatrix) where {T,S} K = length(model.trees[1].nodes[1].pred) - pred = zeros(Float32, size(X, 1), K) + pred = zeros(T, size(X, 1), K) for tree in model.trees predict_gpu!(pred, tree, X) end diff --git a/test/gpu_base.jl b/test/gpu_base.jl index 3fe66b97..6ad1fcd7 100644 --- a/test/gpu_base.jl +++ b/test/gpu_base.jl @@ -29,7 +29,7 @@ Y_train, Y_eval = Y[𝑖_train], Y[𝑖_eval] ################################ # linear ################################ -params1 = EvoTreeRegressor( +params1 = EvoTreeRegressor(T=Float32, loss=:linear, metric=:none, nrounds=200, nbins = 64, λ = 0.5, γ=0.1, η=0.1, From 46a1c096387b63ead2fc7ee45678782fb04247f7 Mon Sep 17 00:00:00 2001 From: "jeremie.db" Date: Mon, 10 Aug 2020 01:30:56 -0400 Subject: [PATCH 28/29] fix rng instead of seed in tests --- test/core.jl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/core.jl b/test/core.jl index 9f54b454..357b5ae9 100644 --- a/test/core.jl +++ b/test/core.jl @@ -26,7 +26,7 @@ params1 = EvoTreeRegressor( nrounds=100, nbins=100, λ = 0.5, γ=0.1, η=0.05, max_depth = 6, min_weight = 1.0, - rowsample=0.5, colsample=1.0, seed = seed) + rowsample=0.5, colsample=1.0, rng = seed) model = fit_evotree(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) pred_train_linear = predict(model, X_train) @@ -39,7 +39,7 @@ params1 = EvoTreeRegressor( nrounds=100, λ = 0.5, γ=0.1, η=0.05, max_depth = 6, min_weight = 1.0, - rowsample=0.5, colsample=1.0, seed = seed) + rowsample=0.5, colsample=1.0, rng = seed) model = fit_evotree(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) pred_train_logistic = predict(model, X_train) @@ -49,7 +49,7 @@ params1 = EvoTreeCount( nrounds=100, λ = 0.5, γ=0.1, η=0.05, max_depth = 6, min_weight = 1.0, - rowsample=0.5, colsample=1.0, seed = seed) + rowsample=0.5, colsample=1.0, rng = seed) model = fit_evotree(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) pred_train_poisson = predict(model, X_train) @@ -59,7 +59,7 @@ params1 = EvoTreeRegressor( nrounds=100, nbins=100, λ = 0.5, γ=0.0, η=0.05, max_depth = 6, min_weight = 1.0, - rowsample=0.5, colsample=1.0, seed = seed) + rowsample=0.5, colsample=1.0, rng = seed) model = fit_evotree(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) pred_train_L1 = predict(model, X_train) @@ -69,7 +69,7 @@ params1 = EvoTreeRegressor( nrounds=100, nbins=100, λ = 0.5, γ=0.0, η=0.05, max_depth = 6, min_weight = 1.0, - rowsample=0.5, colsample=1.0, seed = seed) + rowsample=0.5, colsample=1.0, rng = seed) model = fit_evotree(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) pred_train_poisson = predict(model, X_train) @@ -79,7 +79,7 @@ params1 = EvoTreeGaussian( nrounds=100, nbins=100, λ = 0.0, γ=0.0, η=0.05, max_depth = 6, min_weight = 10.0, - rowsample=0.5, colsample=1.0, seed = seed) + rowsample=0.5, colsample=1.0, rng = seed) model = fit_evotree(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) pred_train_gaussian = predict(model, X_train) From 2e379b19f7e821ae9764d8afd3bc1d7113359011 Mon Sep 17 00:00:00 2001 From: "jeremie.db" Date: Mon, 10 Aug 2020 12:59:06 -0400 Subject: [PATCH 29/29] gpu logistic --- README.md | 6 +++- experiments/random.jl | 31 ++++++++++++++-- src/EvoTrees.jl | 2 ++ src/eval_gpu.jl | 83 +++++++++++++++++++++++++++++++++++++++++++ src/fit_gpu.jl | 18 ++++++---- src/loss_gpu.jl | 51 ++++++++++++++++++++------ test/core.jl | 1 + test/gpu_base.jl | 63 ++++++++++++++++++++++++++++---- 8 files changed, 227 insertions(+), 28 deletions(-) create mode 100644 src/eval_gpu.jl diff --git a/README.md b/README.md index ad12b8e4..bac848de 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,11 @@ Currently supports: Input features is expected to be `Matrix{Float64/Float32}`. User friendly format conversion to be done (or see integration with MLJ). -An experimental GPU support is now provided for linear and Gaussian objective functions. +## GPU + +An experimental GPU support is now provided for linear, logistic and Gaussian objective functions. Speedup compared to multi-threaded cpu histogram is modest at the moment (~25% vs 16 CPU threads on RTX2080). + +Simply call `fit_evotree_gpu()` instead of `fit_evotree()` and `predict_gpu()` instead of `predict()`. ## Installation diff --git a/experiments/random.jl b/experiments/random.jl index 92f6d229..288814ab 100644 --- a/experiments/random.jl +++ b/experiments/random.jl @@ -26,7 +26,7 @@ Y_train, Y_eval = Y[𝑖_train], Y[𝑖_eval] ############################# params1 = EvoTreeRegressor(T=Float32, loss=:linear, metric=:none, - nrounds=200, + nrounds=100, λ = 1.0, γ=0.1, η=0.1, max_depth = 6, min_weight = 1.0, rowsample=0.5, colsample=0.5, nbins=64) @@ -41,7 +41,19 @@ params1 = EvoTreeRegressor(T=Float32, @time gain = importance(model, 1:100) ############################# -# CPU - linear +# CPU - Logistic +############################# +params1 = EvoTreeGaussian(T=Float32, + loss=:logistic, metric=:none, + nrounds=100, + λ = 1.0, γ=0.1, η=0.1, + max_depth = 6, min_weight = 1.0, + rowsample=0.5, colsample=0.5, nbins=64) +@time model = fit_evotree(params1, X_train, Y_train); +@time pred = predict(model, X_train); + +############################# +# CPU - Gaussian ############################# params1 = EvoTreeGaussian(T=Float64, loss=:gaussian, metric=:none, @@ -52,7 +64,7 @@ params1 = EvoTreeGaussian(T=Float64, @time model = fit_evotree(params1, X_train, Y_train); ################################ -# GPU +# GPU - Linear ################################ # train model params1 = EvoTreeRegressor(T=Float64, @@ -70,6 +82,19 @@ params1 = EvoTreeRegressor(T=Float64, @time pred_train = EvoTrees.predict_gpu(model, X_train) mean(pred_train) +################################ +# GPU - Logistic +################################ +# train model +params1 = EvoTreeRegressor(T=Float64, + loss=:logistic, metric=:none, + nrounds=100, + λ = 1.0, γ=0.1, η=0.1, + max_depth = 6, min_weight = 1.0, + rowsample=0.5, colsample=0.5, nbins=32) +@time model = fit_evotree_gpu(params1, X_train, Y_train); +@time pred_train = predict_gpu(model, X_train) + ################################ # GPU - Gaussian ################################ diff --git a/src/EvoTrees.jl b/src/EvoTrees.jl index e17943c6..90d10b13 100644 --- a/src/EvoTrees.jl +++ b/src/EvoTrees.jl @@ -1,6 +1,7 @@ module EvoTrees export init_evotree, grow_evotree!, grow_tree, fit_evotree, predict, + fit_evotree_gpu, predict_gpu, EvoTreeRegressor, EvoTreeCount, EvoTreeClassifier, EvoTreeGaussian, EvoTreeRModels, importance @@ -28,6 +29,7 @@ include("MLJ.jl") include("structs_gpu.jl") include("loss_gpu.jl") +include("eval_gpu.jl") include("predict_gpu.jl") include("find_split_gpu.jl") include("fit_gpu.jl") diff --git a/src/eval_gpu.jl b/src/eval_gpu.jl new file mode 100644 index 00000000..aad4ee4b --- /dev/null +++ b/src/eval_gpu.jl @@ -0,0 +1,83 @@ +# function eval_metric(::Val{:mse}, pred::AbstractMatrix{T}, Y::AbstractVector{T}, α=0.0) where T <: AbstractFloat +# eval = mean((pred .- Y) .^ 2) +# return eval +# end +function eval_metric(::Val{:mse}, pred::AbstractMatrix{T}, y::AbstractVector{T}, α) where T <: AbstractFloat + eval = zero(T) + @inbounds for i in 1:length(pred) + eval += (pred[i,1] - y[i]) ^ 2 + end + eval /= length(pred) + return eval +end + +function eval_metric(::Val{:rmse}, pred::AbstractMatrix{T}, y::AbstractVector{T}, α=0.0) where T <: AbstractFloat + eval = zero(T) + @inbounds for i in 1:length(pred) + eval += (pred[i,1] - y[i]) ^ 2 + end + eval = sqrt(eval/length(pred)) + return eval +end + +function eval_metric(::Val{:mae}, pred::AbstractMatrix{T}, y::AbstractVector{T}, α=0.0) where T <: AbstractFloat + eval = zero(T) + @inbounds for i in 1:length(pred) + eval += abs(pred[i,1] - y[i]) + end + eval /= length(pred) + return eval +end + +function eval_metric(::Val{:logloss}, pred::AbstractMatrix{T}, y::AbstractVector{T}, α=0.0) where T <: AbstractFloat + eval = zero(T) + @inbounds for i in 1:length(y) + eval -= y[i] * log(max(1e-8, sigmoid(pred[i,1]))) + (1 - y[i]) * log(max(1e-8, 1 - sigmoid(pred[i,1]))) + end + eval /= length(y) + return eval +end + +function eval_metric(::Val{:mlogloss}, pred::AbstractMatrix{T}, y::Vector{S}, α=0.0) where {T <: AbstractFloat, S <: Integer} + eval = zero(T) + L = length(y) + K = size(pred,2) + # pred = pred - maximum.(pred) + @inbounds for i in 1:L + pred[i] = pred[i] .- maximum(pred[i]) + soft_pred = exp.(pred[i]) / sum(exp.(pred[i])) + eval -= log(soft_pred[y[i]]) + end + eval /= length(y) + return eval +end + +function eval_metric(::Val{:poisson}, pred::AbstractMatrix{T}, y::AbstractVector{T}, α=0.0) where T <: AbstractFloat + eval = zero(T) + @inbounds for i in 1:length(y) + eval += exp(pred[i,1]) * (1 - y[i]) + log(factorial(y[i])) + end + eval /= length(y) + return eval +end + +# gaussian +# pred[i][1] = μ +# pred[i][2] = log(σ) +function eval_metric(::Val{:gaussian}, pred::AbstractMatrix{T}, y::AbstractVector{T}, α=0.0) where {L, T <: AbstractFloat} + eval = zero(T) + @inbounds for i in 1:length(y) + eval += pred[i,2] + (y[i] - pred[i,1])^2 / (2*max(1e-8, exp(2*pred[i,2]))) + end + eval /= length(y) + return eval +end + +function eval_metric(::Val{:quantile}, pred::AbstractMatrix{T}, y::AbstractVector{T}, α=0.0) where T <: AbstractFloat + eval = zero(T) + for i in 1:length(y) + eval += α * max(y[i] - pred[i,1], zero(T)) + (1-α) * max(pred[i,1] - y[i], zero(T)) + end + eval /= length(y) + return eval +end diff --git a/src/fit_gpu.jl b/src/fit_gpu.jl index 2e458625..7b1ce498 100644 --- a/src/fit_gpu.jl +++ b/src/fit_gpu.jl @@ -6,10 +6,12 @@ function init_evotree_gpu(params::EvoTypes{T,U,S}, levels = "" X = convert(Matrix{T}, X) if typeof(params.loss) == Logistic - Y = T.(Y) - μ = logit(mean(Y)) + Y_cpu = T.(Y) + Y = CuArray(Y_cpu) + μ = [logit(mean(Y))] elseif typeof(params.loss) == Poisson - Y = T.(Y) + Y_cpu = T.(Y) + Y = CuArray(Y_cpu) μ = fill(log(mean(Y)), 1) elseif typeof(params.loss) == Softmax if typeof(Y) <: AbstractCategoricalVector @@ -25,10 +27,12 @@ function init_evotree_gpu(params::EvoTypes{T,U,S}, end elseif typeof(params.loss) == Gaussian K = 2 - Y = CuArray(T.(Y)) + Y_cpu = T.(Y) + Y = CuArray(Y_cpu) μ = [mean(Y), log(std(Y))] else - Y = CuArray(T.(Y)) + Y_cpu = T.(Y) + Y = CuArray(Y_cpu) μ = [mean(Y)] end @@ -71,7 +75,7 @@ function init_evotree_gpu(params::EvoTypes{T,U,S}, end cache = (params=deepcopy(params), - X=X, Y=Y, K=K, + X=X, Y=Y, Y_cpu=Y_cpu, K=K, pred=pred, pred_cpu=pred_cpu, 𝑖_=𝑖_, 𝑗_=𝑗_, δ=δ, δ²=δ², 𝑤=𝑤, edges=edges, @@ -236,7 +240,7 @@ function fit_evotree_gpu(params, X_train, Y_train; predict_gpu!(pred_eval, model.trees[model.params.nrounds+1], X_eval) metric_track.metric = eval_metric(Val{params.metric}(), pred_eval, Y_eval, params.α) else - metric_track.metric = eval_metric(Val{params.metric}(), cache.pred, cache.Y, params.α) + metric_track.metric = eval_metric(Val{params.metric}(), cache.pred_cpu, cache.Y_cpu, params.α) end if metric_track.metric < metric_best.metric metric_best.metric = metric_track.metric diff --git a/src/loss_gpu.jl b/src/loss_gpu.jl index ae05414a..eee76081 100644 --- a/src/loss_gpu.jl +++ b/src/loss_gpu.jl @@ -1,3 +1,9 @@ +# Gradient regression +function get_gain(loss::S, ∑δ::AbstractVector{T}, ∑δ²::AbstractVector{T}, ∑𝑤::T, λ::T) where {S <: Union{GradientRegression,GaussianRegression}, T <: AbstractFloat} + gain = sum((∑δ .^ 2 ./ (∑δ² .+ λ .* ∑𝑤)) ./ 2) + return gain +end + ##################### # linear ##################### @@ -18,7 +24,7 @@ function kernel_linear_δ²!(δ²::CuDeviceMatrix{T}, p::CuDeviceMatrix{T}, t::C end # base approach - block built along the cols first, the rows (limit collisions) -function update_grads_gpu!(loss::S, δ::CuMatrix{T}, δ²::CuMatrix{T}, p::CuMatrix{T}, t::CuVector{T}, 𝑤::CuVector{T}; MAX_THREADS=1024) where {S <: GradientRegression, T<:AbstractFloat} +function update_grads_gpu!(loss::Linear, δ::CuMatrix{T}, δ²::CuMatrix{T}, p::CuMatrix{T}, t::CuVector{T}, 𝑤::CuVector{T}; MAX_THREADS=1024) where {T<:AbstractFloat} thread_i = min(MAX_THREADS, length(t)) threads = (thread_i) blocks = ceil.(Int, (length(t)) ./ threads) @@ -28,10 +34,33 @@ function update_grads_gpu!(loss::S, δ::CuMatrix{T}, δ²::CuMatrix{T}, p::CuMat end -# Gradient regression -function get_gain(loss::S, ∑δ::AbstractVector{T}, ∑δ²::AbstractVector{T}, ∑𝑤::T, λ::T) where {S <: GradientRegression, T <: AbstractFloat} - gain = sum((∑δ .^ 2 ./ (∑δ² .+ λ .* ∑𝑤)) ./ 2) - return gain +##################### +# Logistic +##################### +function kernel_logistic_δ!(δ::CuDeviceMatrix{T}, p::CuDeviceMatrix{T}, t::CuDeviceVector{T}, 𝑤::CuDeviceVector{T}) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + if i <= length(t) + @inbounds δ[i] = (sigmoid(p[i]) * (1 - t[i]) - (1 - sigmoid(p[i])) * t[i]) * 𝑤[i] + end + return +end + +function kernel_logistic_δ²!(δ²::CuDeviceMatrix{T}, p::CuDeviceMatrix{T}, t::CuDeviceVector{T}, 𝑤::CuDeviceVector{T}) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + if i <= length(t) + @inbounds δ²[i] = sigmoid(p[i]) * (1 - sigmoid(p[i])) * 𝑤[i] + end + return +end + +# base approach - block built along the cols first, the rows (limit collisions) +function update_grads_gpu!(loss::Logistic, δ::CuMatrix{T}, δ²::CuMatrix{T}, p::CuMatrix{T}, t::CuVector{T}, 𝑤::CuVector{T}; MAX_THREADS=1024) where {T<:AbstractFloat} + thread_i = min(MAX_THREADS, length(t)) + threads = (thread_i) + blocks = ceil.(Int, (length(t)) ./ threads) + @cuda blocks=blocks threads=threads kernel_logistic_δ!(δ, p, t, 𝑤) + @cuda blocks=blocks threads=threads kernel_logistic_δ²!(δ², p, t, 𝑤) + return end @@ -59,7 +88,7 @@ function kernel_gauss_δ²!(δ²::CuDeviceMatrix{T}, p::CuDeviceMatrix{T}, t::Cu end # base approach - block built along the cols first, the rows (limit collisions) -function update_grads_gpu!(loss::S, δ::CuMatrix{T}, δ²::CuMatrix{T}, p::CuMatrix{T}, t::CuVector{T}, 𝑤::CuVector{T}; MAX_THREADS=1024) where {S <: GaussianRegression, T<:AbstractFloat} +function update_grads_gpu!(loss::Gaussian, δ::CuMatrix{T}, δ²::CuMatrix{T}, p::CuMatrix{T}, t::CuVector{T}, 𝑤::CuVector{T}; MAX_THREADS=1024) where {T<:AbstractFloat} thread_i = min(MAX_THREADS, length(t)) threads = (thread_i) blocks = ceil.(Int, (length(t)) ./ threads) @@ -68,8 +97,8 @@ function update_grads_gpu!(loss::S, δ::CuMatrix{T}, δ²::CuMatrix{T}, p::CuMat return end -# GaussianRegression -function get_gain(loss::S, ∑δ::AbstractVector{T}, ∑δ²::AbstractVector{T}, ∑𝑤::T, λ::T) where {S <: GaussianRegression, T <: AbstractFloat} - gain = sum((∑δ .^ 2 ./ (∑δ² .+ λ .* ∑𝑤)) ./ 2) - return gain -end +# # GaussianRegression +# function get_gain(loss::S, ∑δ::AbstractVector{T}, ∑δ²::AbstractVector{T}, ∑𝑤::T, λ::T) where {S <: GaussianRegression, T <: AbstractFloat} +# gain = sum((∑δ .^ 2 ./ (∑δ² .+ λ .* ∑𝑤)) ./ 2) +# return gain +# end diff --git a/test/core.jl b/test/core.jl index 357b5ae9..3e5dcb49 100644 --- a/test/core.jl +++ b/test/core.jl @@ -80,6 +80,7 @@ params1 = EvoTreeGaussian( λ = 0.0, γ=0.0, η=0.05, max_depth = 6, min_weight = 10.0, rowsample=0.5, colsample=1.0, rng = seed) +model = fit_evotree(params1, X_train, Y_train, print_every_n = 25) model = fit_evotree(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) pred_train_gaussian = predict(model, X_train) diff --git a/test/gpu_base.jl b/test/gpu_base.jl index 6ad1fcd7..4df70581 100644 --- a/test/gpu_base.jl +++ b/test/gpu_base.jl @@ -36,27 +36,67 @@ params1 = EvoTreeRegressor(T=Float32, max_depth = 6, min_weight = 1.0, rowsample=0.5, colsample=1.0) -@time model = EvoTrees.fit_evotree_gpu(params1, X_train, Y_train); -@time pred_train_linear = EvoTrees.predict_gpu(model, X_train) +@time model = fit_evotree_gpu(params1, X_train, Y_train); +@time pred_train_linear = predict_gpu(model, X_train) x_perm = sortperm(X_train[:,1]) plot(X_train, Y_train, msize = 1, mcolor = "gray", mswidth=0, background_color = RGB(1, 1, 1), seriestype=:scatter, xaxis = ("feature"), yaxis = ("target"), legend = true, label = "") plot!(X_train[:,1][x_perm], pred_train_linear[x_perm], color = "navy", linewidth = 1.5, label = "Linear") # savefig("figures/regression_sinus_gpu.png") +params1 = EvoTreeRegressor(T=Float32, + loss=:linear, metric=:mse, + nrounds=200, nbins = 64, + λ = 0.5, γ=0.1, η=0.1, + max_depth = 6, min_weight = 1.0, + rowsample=0.5, colsample=1.0) + +@time model = fit_evotree_gpu(params1, X_train, Y_train, print_every_n = 25); +@time model = fit_evotree_gpu(params1, X_train, Y_train, X_eval=X_eval, Y_eval=Y_eval, print_every_n = 25); +@time pred_train_linear = predict_gpu(model, X_train) + + +################################ +# Logistic +################################ +params1 = EvoTreeRegressor(T=Float32, + loss=:logistic, metric=:none, + nrounds=200, nbins = 64, + λ = 0.5, γ=0.1, η=0.1, + max_depth = 6, min_weight = 1.0, + rowsample=0.5, colsample=1.0) + +@time model = fit_evotree_gpu(params1, X_train, Y_train); +@time pred_train_linear = predict_gpu(model, X_train) + +x_perm = sortperm(X_train[:,1]) +plot(X_train, Y_train, msize = 1, mcolor = "gray", mswidth=0, background_color = RGB(1, 1, 1), seriestype=:scatter, xaxis = ("feature"), yaxis = ("target"), legend = true, label = "") +plot!(X_train[:,1][x_perm], pred_train_linear[x_perm], color = "navy", linewidth = 1.5, label = "Logistic") +# savefig("figures/regression_sinus_gpu.png") + +params1 = EvoTreeRegressor(T=Float32, + loss=:logistic, metric=:logloss, + nrounds=200, nbins = 64, + λ = 0.5, γ=0.1, η=0.1, + max_depth = 6, min_weight = 1.0, + rowsample=0.5, colsample=1.0) + +@time model = fit_evotree_gpu(params1, X_train, Y_train, print_every_n = 25); +@time model = fit_evotree_gpu(params1, X_train, Y_train, X_eval=X_eval, Y_eval=Y_eval, print_every_n = 25); +@time pred_train_linear = predict_gpu(model, X_train) ################################ # Gaussian ################################ -params1 = EvoTreeGaussian(T=Float32, - loss=:gaussian, metric=:none, +params1 = EvoTreeGaussian(T=Float64, + loss=:gaussian, metric=:gaussian, nrounds=200, nbins=64, λ = 1.0, γ=0.1, η=0.1, max_depth = 5, min_weight = 100.0, rowsample=0.5, colsample=1.0, rng=123) -@time model = EvoTrees.fit_evotree_gpu(params1, X_train, Y_train); -@time pred_train_gauss = EvoTrees.predict_gpu(model, X_train) +@time model = fit_evotree_gpu(params1, X_train, Y_train, print_every_n = 25); +@time pred_train_gauss = predict_gpu(model, X_train) pred_gauss = [Distributions.Normal(pred_train_gauss[i,1], pred_train_gauss[i,2]) for i in 1:size(pred_train_gauss,1)] pred_q80 = quantile.(pred_gauss, 0.8) @@ -72,3 +112,14 @@ plot!(X_train[:,1][x_perm], pred_train_gauss[x_perm, 2], color = "darkred", line plot!(X_train[:,1][x_perm], pred_q20[x_perm, 1], color = "green", linewidth = 1.5, label = "q20") plot!(X_train[:,1][x_perm], pred_q80[x_perm, 1], color = "green", linewidth = 1.5, label = "q80") # savefig("figures/gaussian_sinus_gpu.png") + +params1 = EvoTreeGaussian(T=Float32, + loss=:gaussian, metric=:gaussian, + nrounds=100, nbins=64, + λ = 1.0, γ=0.1, η=0.1, + max_depth = 5, min_weight = 20.0, + rowsample=0.5, colsample=1.0, rng=123) + +@time model = fit_evotree_gpu(params1, X_train, Y_train, print_every_n = 25); +@time model = fit_evotree_gpu(params1, X_train, Y_train, X_eval=X_eval, Y_eval=Y_eval, print_every_n = 25); +@time pred_train_linear = predict_gpu(model, X_train)

S~Q{lu(EoDtS@!6L zokZ0@u6&Y1<1SxQECIjk+G_xY-G;}v_u_p7SPu|fB_t$_s^7zhe}|gqPzHdolhv@P zP9hYWC!wgQ2pqPJW1N0!Lqo%yL*o$rSX#Q2np&J(_%o;|t~haT3mwgTcKkz?Yffbuy>zBkTJ>YZBs-(aqDjezc-dkyIeM@rG9A!jgV=);E( zU0q!}J3A(wA?9Xg{ByKyW0R9LF01_@Jifi$%m3!uA+r8hQv-T~iI}838$eV99*zt_cb6I|-JIs;n+(rI@8w|Pbo(&ruZ4v+ zwzl$$il2F`$H0)Bg^`gjZ&npga=c`#AF+ z=?loIoj79Tyf*RRWN7{U{bPg=U#Y2$19T4Q<$^d{tqC|mpcpffQrzjhTE7e=w;s*z&z(y+GQ{mfDo%Ju_c#e5Rgc6o0Qy&!ediC{ z;$ks|8d$T;%*;5_&Xg2RH)BcIs~-pW6t6Vi@Nk7VUf-A=!cHzO4yShY^suC>)fHV$ z1{#VDR`0daJJa~IxVYO;&|0kvLWLf-<|gRoL=OdR>YB4|-YGI?n?_y}Va05BY$ioU zM#6=7i6w8lz0Rs`gg@gf>{$XLGyE#l;C=`le_+AwXg>Xp)t?a@= z=uSVhSuvf+#VcMQSZ#2pkz2Py*SzWa5jNTF!mo=F_MQ_i#&KJ3J2Nppei)c;n1ot1!?^wF zehk6Acm7=BoN|A*@Dy#(VX3<8>{O|4?dGV}>fLrO^41NexEwv|aAg7&7XHNexSx+` zAv`)sjCqGv5v2yz&Ddg4`L3H!g~}>_J~`el*SJI9zZ0|GX(rt;P#p#n~OexY-5 z@Z!Z;xN)GpN=v(r4#h-7T&O&h@FX^T;WR~NczNUgu&^+EV$OcfOXFru>WKa^FA1hV zXI+sPi~7G3``u`WA>Z}}kGI@oG#WpkJ|nj`eUpg?Ndmtkk11U|n46b}j$wL02|ON; zPN(~b--uM3%i;Uk%vw*i%ZmD6Og!_*=DoJ=(kKx~kTuUu!5tlpr&6hOI-kqUD8G3Y zr3^?j5&++cwjFT%;A}3>haO%g0u{S`4MhQK0q>U6sPo8RFo-L#Rlo`S3P3R|4x$zo z1{mE8U`xBRL=zfil4OMJj!JKj&C$!#gI@Rwy4070Iv`LR>EgTZ!BM;F<{L=W9_s*p z-9qYx9m9O&`_^Ky0BAb{Lj;BIm!d@z!XrAphgkgBjZmNyF9&Wd6O}yxCeO|mS2kYA wC6?SLu?WSIY1_X3+u8oR|N4hJ`yWq(>&K3c`HXv~RU{ny3ySgwbKjKx1@}RQod5s; diff --git a/src/find_split_gpu.jl b/src/find_split_gpu.jl index 726479bb..ecaa5705 100644 --- a/src/find_split_gpu.jl +++ b/src/find_split_gpu.jl @@ -1,21 +1,24 @@ # GPU - apply along the features axis -function kernel_v1!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} +function kernel!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id, 𝑖, 𝑗) where {T<:AbstractFloat} i = threadIdx().x + (blockIdx().x - 1) * blockDim().x j = threadIdx().y + (blockIdx().y - 1) * blockDim().y - @inbounds if i <= size(id, 1) && j <= size(h, 2) - k = Base._to_linear_index(h, id[i,j], j) - CUDAnative.atomic_add!(pointer(h, k), x[i,j]) + if i <= length(𝑖) && j <= length(𝑗) + @inbounds k = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], 𝑗[j]) + @inbounds CUDAnative.atomic_add!(pointer(h, k), x[𝑖[i], 𝑗[j]]) end return end -function hist_gpu_v1!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}; MAX_THREADS=512) where {T<:AbstractFloat} - thread_j = min(MAX_THREADS, size(id, 2)) - thread_i = min(MAX_THREADS ÷ thread_j, size(h, 1)) +# base approach - block built along the cols first, the rows (limit collisions) +function hist_gpu!(h::CuMatrix{T}, x::CuMatrix{T}, id, 𝑖, 𝑗; MAX_THREADS=1024) where {T<:AbstractFloat} + thread_j = min(MAX_THREADS, length(𝑗)) + thread_i = min(MAX_THREADS ÷ thread_j, length(𝑖)) threads = (thread_i, thread_j) - blocks = ceil.(Int, (size(id, 1), size(h, 2)) ./ threads) - CuArrays.@cuda blocks=blocks threads=threads kernel_v1!(h, x, id) - return h + blocks = ceil.(Int, (length(𝑖), length(𝑗)) ./ threads) + CuArrays.@sync begin + @cuda blocks=blocks threads=threads kernel!(h, x, id, 𝑖, 𝑗) + end + return end function update_hist_gpu!(hist_δ::Matrix{SVector{L,T}}, hist_δ²::Matrix{SVector{L,T}}, hist_𝑤::Matrix{SVector{1,T}}, @@ -29,13 +32,6 @@ function update_hist_gpu!(hist_δ::Matrix{SVector{L,T}}, hist_δ²::Matrix{SVect hist_gpu_v1!(hist_δ, δ, id) hist_gpu_v1!(hist_δ², δ², id) hist_gpu_v1!(hist_𝑤, 𝑤, id) - # @inbounds @threads for j in node.𝑗 - # @inbounds for i in node.𝑖 - # hist_δ[X_bin[i,j], j] += δ[i] - # hist_δ²[X_bin[i,j], j] += δ²[i] - # hist_𝑤[X_bin[i,j], j] += 𝑤[i] - # end - # end end function find_split_gpu!(hist_δ::AbstractVector{SVector{L,T}}, hist_δ²::AbstractVector{SVector{L,T}}, hist_𝑤::AbstractVector{SVector{1,T}}, @@ -75,20 +71,3 @@ function find_split_gpu!(hist_δ::AbstractVector{SVector{L,T}}, hist_δ²::Abstr end # info update if gain end # loop on bins end - - -function find_split_gpu_test!(hist_δ::Vector{SVector{L,T}}, hist_δ²::Vector{SVector{L,T}}, hist_𝑤::Vector{SVector{1,T}}, bins::Vector{BitSet}, X_bin, δ::Vector{SVector{L,T}}, δ²::Vector{SVector{L,T}}, 𝑤::Vector{SVector{1,T}}, ∑δ::SVector{L,T}, ∑δ²::SVector{L,T}, ∑𝑤::SVector{1,T}, params::EvoTreeRegressor, info::SplitInfo{L,T,S}, edges::Vector{T}, set::Vector{S}) where {L,T,S} - - # initialize histogram - hist_δ .*= 0.0 - hist_δ² .*= 0.0 - hist_𝑤 .*= 0.0 - - # build histogram - @inbounds for i in set - hist_δ[X_bin[i]] += δ[i] - hist_δ²[X_bin[i]] += δ²[i] - hist_𝑤[X_bin[i]] += 𝑤[i] - end - return -end diff --git a/test/hist_gpu.jl b/test/hist_gpu.jl index cefee42d..238f1fef 100644 --- a/test/hist_gpu.jl +++ b/test/hist_gpu.jl @@ -1,6 +1,8 @@ +using Revise using CUDAnative using CuArrays using StaticArrays +using StatsBase: sample using BenchmarkTools function hist_cpu!(hist, δ, idx) @@ -13,24 +15,27 @@ function hist_cpu!(hist, δ, idx) end # base kernel -function kernel1!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id) where {T<:AbstractFloat} +function kernel1!(h, x, id) i = threadIdx().x + (blockIdx().x - 1) * blockDim().x j = threadIdx().y + (blockIdx().y - 1) * blockDim().y if i <= size(id, 1) && j <= size(id, 2) @inbounds k = Base._to_linear_index(h, id[i,j], j) + # @inbounds k = id[i,j] + 32 * (j-1) @inbounds CUDAnative.atomic_add!(pointer(h, k), x[i,j]) end return end # base approach - block built along the cols first, the rows (limit collisions) -function hist_gpu1!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}; MAX_THREADS=256) where {T<:AbstractFloat} +function hist_gpu1!(h::AbstractMatrix{T}, x::AbstractMatrix{T}, id; MAX_THREADS=256) where {T} # thread_i = min(MAX_THREADS, size(id, 1)) # thread_j = min(MAX_THREADS ÷ thread_i, size(id, 2)) thread_j = min(MAX_THREADS, size(id, 2)) thread_i = min(MAX_THREADS ÷ thread_j, size(id, 1)) threads = (thread_i, thread_j) - blocks = ceil.(Int, (size(id, 1), size(id, 2)) ./ threads) + blocks = ceil.(Int, (size(id, 1), size(id, 2)) .÷ threads) + println("threads:", threads) + println("blocks:", blocks) CuArrays.@sync begin @cuda blocks=blocks threads=threads kernel1!(h, x, id) end @@ -39,10 +44,10 @@ end nbins = 32 ncol = 100 -items = Int(2^20) +items = Int32(2^20) hist = zeros(Float32, nbins, ncol) δ = rand(Float32, items, ncol) -idx = rand(1:nbins, items, ncol) +idx = Int64.(rand(1:nbins, items, ncol)) hist_gpu = CuArray(hist) δ_gpu = CuArray(δ) @@ -55,6 +60,172 @@ sum(hist) - sum(Array(hist_gpu)) @time hist_cpu!(hist, δ, idx) @btime hist_cpu!($hist, $δ, $idx) @btime hist_gpu1!($hist_gpu, $δ_gpu, $idx_gpu, MAX_THREADS=1024) +# test on view +@CuArrays.time hist_gpu1!(hist_gpu, view(δ_gpu, 1:items÷2, 1:ncol÷2), view(idx_gpu, 1:items÷2, 1:ncol÷2), MAX_THREADS=1024) + +size(δ_gpu) +size(view(δ_gpu, 1:items÷2, 1:ncol÷2)) + +############################################################## +## Build histogram from a subsample idx +# base kernel +function kernel2!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id, 𝑖, 𝑗) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + if i <= length(𝑖) && j <= length(𝑗) + @inbounds k = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], 𝑗[j]) + @inbounds CUDAnative.atomic_add!(pointer(h, k), x[𝑖[i], 𝑗[j]]) + end + return +end + +# base approach - block built along the cols first, the rows (limit collisions) +function hist_gpu2!(h::CuMatrix{T}, x::CuMatrix{T}, id, 𝑖, 𝑗; MAX_THREADS=1024) where {T<:AbstractFloat} + thread_j = min(MAX_THREADS, length(𝑗)) + thread_i = min(MAX_THREADS ÷ thread_j, length(𝑖)) + threads = (thread_i, thread_j) + blocks = ceil.(Int, (length(𝑖), length(𝑗)) ./ threads) + # println("threads:", threads) + # println("blocks:", blocks) + CuArrays.@sync begin + @cuda blocks=blocks threads=threads kernel2!(h, x, id, 𝑖, 𝑗) + end + return +end + +hist = zeros(Float32, nbins, ncol) +δ = rand(Float32, items, ncol) +idx = rand(1:nbins, items, ncol) +𝑖 = sample(1:items, items ÷ 2, replace=false, ordered=true) +𝑗 = sample(1:ncol, ncol ÷ 2, replace=false, ordered=true) +hist_gpu = CuArray(hist) +δ_gpu = CuArray(δ) +idx_gpu = CuArray(idx) +𝑖_gpu = CuArray(𝑖) +𝑗_gpu = CuArray(𝑗) + +@CuArrays.time hist_gpu2!(hist_gpu, δ_gpu, idx_gpu, 𝑖_gpu, 𝑗_gpu, MAX_THREADS=1024) +@btime hist_gpu2!($hist_gpu, $δ_gpu, $idx_gpu, 𝑖_gpu, 𝑗_gpu, MAX_THREADS=1024) + + +############################################# +# test for SVector - basic test - success! +function kernel!(x, y) + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + if i <= length(x) + # @inbounds x[i] += y[i] + k = Base._to_linear_index(x, i) + CUDAnative.atomic_add!(pointer(x, k), y[i]) + end + return +end + +# base approach - block built along the cols first, the rows (limit collisions) +function hist_gpu!(x, y; MAX_THREADS=1024) + thread_i = min(MAX_THREADS, length(x)) + threads = (thread_i) + blocks = ceil.(Int, length(x) .÷ threads) + CuArrays.@sync begin + @cuda blocks=blocks threads=threads kernel!(x, y) + end + return +end + +x = rand(SVector{2, Float32}, Int(1e7)) +y = rand(SVector{2, Float32}, Int(1e7)) +x = rand(Float32, Int(1e7)) +y = rand(Float32, Int(1e7)) + +x_gpu = CuArray(x) +y_gpu = CuArray(y) + +@CuArrays.time hist_gpu!(x_gpu, y_gpu) +@btime hist_gpu!($x_gpu, $y_gpu) + + +############################################# +# test for SVector - real test +function kernelS2!(h, x, id) + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + if i <= size(id, 1) && j <= size(id, 2) + @inbounds k = Base._to_linear_index(h, id[i,j], j) + # @inbounds k = id[i,j] + 32 * (j-1) + # @inbounds CUDAnative.atomic_add!(pointer(h, k), x[i,j]) + # h[id[i,j],j] += x[i,j] + end + return +end + +# base approach - block built along the cols first, the rows (limit collisions) +function hist_gpuS2!(h, x, id; MAX_THREADS=256) where {T} + thread_j = min(MAX_THREADS, size(id, 2)) + thread_i = min(MAX_THREADS ÷ thread_j, size(id, 1)) + threads = (thread_i, thread_j) + blocks = ceil.(Int, (size(id, 1), size(id, 2)) .÷ threads) + println("threads:", threads) + println("blocks:", blocks) + CuArrays.@sync begin + @cuda blocks=blocks threads=threads kernelS2!(h, x, id) + end + return +end + +hist = zeros(SVector{2, Float32}, nbins, ncol) +δ = rand(SVector{2, Float32}, items, ncol) +idx = rand(1:nbins, items, ncol) +hist_gpu = CuArray(hist) +δ_gpu = CuArray(δ) +idx_gpu = CuArray(idx) + +@CuArrays.time hist_gpuS2!(hist_gpu, δ_gpu, idx_gpu) +@btime hist_gpuS2!($hist_gpu, $δ_gpu, $idx_gpu) + + +############################################################## +## Build histogram from a subsample idx +# accumulate all gradient single pass +function kernel3!(h, x, id, 𝑖, 𝑗) + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + if i <= length(𝑖) && j <= length(𝑗) + @inbounds k = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], 𝑗[j], 1) + @inbounds CUDAnative.atomic_add!(pointer(h, k), x[𝑖[i], 𝑗[j], 1]) + @inbounds k = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], 𝑗[j], 2) + @inbounds CUDAnative.atomic_add!(pointer(h, k), x[𝑖[i], 𝑗[j], 2]) + end + return +end + +# base approach - block built along the cols first, the rows (limit collisions) +function hist_gpu3!(h, x, id, 𝑖, 𝑗; MAX_THREADS=1024) + thread_j = min(MAX_THREADS, length(𝑗)) + thread_i = min(MAX_THREADS ÷ thread_j, length(𝑖)) + threads = (thread_i, thread_j) + blocks = ceil.(Int, (length(𝑖), length(𝑗)) ./ threads) + # println("threads:", threads) + # println("blocks:", blocks) + CuArrays.@sync begin + @cuda blocks=blocks threads=threads kernel3!(h, x, id, 𝑖, 𝑗) + end + return +end + +hist = zeros(Float32, nbins, ncol, 2) +δ = rand(Float32, items, ncol, 2) +idx = rand(1:nbins, items, ncol) +𝑖 = sample(1:items, items ÷ 2, replace=false, ordered=true) +𝑗 = sample(1:ncol, ncol ÷ 2, replace=false, ordered=true) +hist_gpu = CuArray(hist) +δ_gpu = CuArray(δ) +idx_gpu = CuArray(idx) +𝑖_gpu = CuArray(𝑖) +𝑗_gpu = CuArray(𝑗) + +@CuArrays.time hist_gpu3!(hist_gpu, δ_gpu, idx_gpu, 𝑖_gpu, 𝑗_gpu, MAX_THREADS=1024) +@btime hist_gpu3!($hist_gpu, $δ_gpu, $idx_gpu, 𝑖_gpu, 𝑗_gpu, MAX_THREADS=1024) + + # accumulate in shared memory histograms From f8886abe8471af462ee9b967073112c7b8e76a22 Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Sat, 20 Jun 2020 18:04:52 -0400 Subject: [PATCH 16/29] experiments --- Project.toml | 7 ++- src/EvoTrees.jl | 7 +++ src/find_split_gpu.jl | 26 +++++------ src/fit_gpu.jl | 83 +++++++++++++++------------------- src/loss_gpu.jl | 12 +++++ src/predict_gpu.jl | 51 +++++++++++++++++++++ src/structs_gpu.jl | 54 ++++++++++++++++++++++ test/gpu_base.jl | 89 +++++++++++++++++++++++++++++++++++++ test/hist_gpu.jl | 101 ++++++++++++++++++++++++++++++++++-------- 9 files changed, 347 insertions(+), 83 deletions(-) create mode 100644 src/loss_gpu.jl create mode 100644 src/predict_gpu.jl create mode 100644 src/structs_gpu.jl create mode 100644 test/gpu_base.jl diff --git a/Project.toml b/Project.toml index da298b59..4cedbe9c 100644 --- a/Project.toml +++ b/Project.toml @@ -4,9 +4,8 @@ authors = ["jeremiedb "] version = "0.4.7" [deps] -CUDAnative = "be33ccc6-a3ff-5ff2-a52e-74243cff1e17" +CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" CategoricalArrays = "324d7699-5711-5eae-9e2f-1d82baa6b597" -CuArrays = "3a865a2d-5b23-5a0f-bc46-62713ec82fae" Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" MLJModelInterface = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" @@ -15,9 +14,9 @@ Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" [compat] -CategoricalArrays = "0.7" +CategoricalArrays = "0.8" Distributions = "0.22, 0.23" -MLJModelInterface = "0.1, 0.2" +MLJModelInterface = "0.3" StaticArrays = "0.12" StatsBase = "0.32, 0.33" julia = "1" diff --git a/src/EvoTrees.jl b/src/EvoTrees.jl index 09683699..76546575 100644 --- a/src/EvoTrees.jl +++ b/src/EvoTrees.jl @@ -11,6 +11,7 @@ using Random: seed! using StaticArrays using Distributions using CategoricalArrays +using CUDA import MLJModelInterface import MLJModelInterface: fit, update import MLJModelInterface: predict @@ -25,4 +26,10 @@ include("fit.jl") include("importance.jl") include("MLJ.jl") +include("structs_gpu.jl") +include("loss_gpu.jl") +include("predict_gpu.jl") +include("find_split_gpu.jl") +include("fit_gpu.jl") + end # module diff --git a/src/find_split_gpu.jl b/src/find_split_gpu.jl index ecaa5705..0b31f239 100644 --- a/src/find_split_gpu.jl +++ b/src/find_split_gpu.jl @@ -1,41 +1,39 @@ # GPU - apply along the features axis -function kernel!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id, 𝑖, 𝑗) where {T<:AbstractFloat} +function kernel!(h::CuDeviceMatrix{T}, x::CuDeviceVector{T}, id, 𝑖, 𝑗) where {T<:AbstractFloat} i = threadIdx().x + (blockIdx().x - 1) * blockDim().x j = threadIdx().y + (blockIdx().y - 1) * blockDim().y if i <= length(𝑖) && j <= length(𝑗) @inbounds k = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], 𝑗[j]) - @inbounds CUDAnative.atomic_add!(pointer(h, k), x[𝑖[i], 𝑗[j]]) + @inbounds CUDA.atomic_add!(pointer(h, k), x[𝑖[i]]) end return end # base approach - block built along the cols first, the rows (limit collisions) -function hist_gpu!(h::CuMatrix{T}, x::CuMatrix{T}, id, 𝑖, 𝑗; MAX_THREADS=1024) where {T<:AbstractFloat} +function hist_gpu!(h::CuMatrix{T}, x::CuVector{T}, id::CuMatrix{Int}, 𝑖, 𝑗; MAX_THREADS=1024) where {T<:AbstractFloat} thread_j = min(MAX_THREADS, length(𝑗)) thread_i = min(MAX_THREADS ÷ thread_j, length(𝑖)) threads = (thread_i, thread_j) blocks = ceil.(Int, (length(𝑖), length(𝑗)) ./ threads) - CuArrays.@sync begin - @cuda blocks=blocks threads=threads kernel!(h, x, id, 𝑖, 𝑗) - end + @cuda blocks=blocks threads=threads kernel!(h, x, id, 𝑖, 𝑗) return end -function update_hist_gpu!(hist_δ::Matrix{SVector{L,T}}, hist_δ²::Matrix{SVector{L,T}}, hist_𝑤::Matrix{SVector{1,T}}, - δ::Vector{SVector{L,T}}, δ²::Vector{SVector{L,T}}, 𝑤::Vector{SVector{1,T}}, - X_bin, node::TrainNode{L,T,S}) where {L,T,S} +function update_hist_gpu!(hist_δ::AbstractMatrix{T}, hist_δ²::AbstractMatrix{T}, hist_𝑤::AbstractMatrix{T}, + δ::AbstractVector{T}, δ²::AbstractVector{T}, 𝑤::AbstractVector{T}, + X_bin::AbstractMatrix{Int}, node::TrainNode_gpu{T,S}) where {T,S} hist_δ .*= 0.0 hist_δ² .*= 0.0 hist_𝑤 .*= 0.0 - hist_gpu_v1!(hist_δ, δ, id) - hist_gpu_v1!(hist_δ², δ², id) - hist_gpu_v1!(hist_𝑤, 𝑤, id) + hist_gpu!(hist_δ, δ, X_bin, CuArray(node.𝑖), CuArray(node.𝑗)) + hist_gpu!(hist_δ², δ², X_bin, CuArray(node.𝑖), CuArray(node.𝑗)) + hist_gpu!(hist_𝑤, 𝑤, X_bin, CuArray(node.𝑖), CuArray(node.𝑗)) end -function find_split_gpu!(hist_δ::AbstractVector{SVector{L,T}}, hist_δ²::AbstractVector{SVector{L,T}}, hist_𝑤::AbstractVector{SVector{1,T}}, - params::EvoTypes, node::TrainNode{L,T,S}, info::SplitInfo{L,T,S}, edges::Vector{T}) where {L,T,S} +function find_split_gpu!(hist_δ::AbstractVector{T}, hist_δ²::AbstractVector{T}, hist_𝑤::AbstractVector{T}, + params::EvoTypes, node::TrainNode_gpu{T,S}, info::SplitInfo_gpu{T,S}, edges::Vector{T}) where {T,S} # initialize tracking ∑δL = node.∑δ * 0 diff --git a/src/fit_gpu.jl b/src/fit_gpu.jl index e16ca744..15a9b157 100644 --- a/src/fit_gpu.jl +++ b/src/fit_gpu.jl @@ -3,12 +3,13 @@ function init_evotree_gpu(params::EvoTypes, X::AbstractMatrix{R}, Y::AbstractVector{S}; verbosity=1) where {R,S} seed!(params.seed) + X_size = size(X) K = 1 levels = "" if typeof(params.loss) == Logistic Y = Float32.(Y) - μ = fill(logit(mean(Y)), 1) + μ = logit(mean(Y)) elseif typeof(params.loss) == Poisson Y = Float32.(Y) μ = fill(log(mean(Y)), 1) @@ -27,57 +28,45 @@ function init_evotree_gpu(params::EvoTypes, elseif typeof(params.loss) == Gaussian K = 2 Y = Float32.(Y) - μ = SVector{2}([mean(Y), log(var(Y))]) + μ =[mean(Y), log(var(Y))] else - Y = Float32.(Y) - μ = fill(mean(Y), 1) + Y = CuArray(Float32.(Y)) + μ = mean(Y) end # initialize preds - pred = zeros(SVector{K,Float32}, size(X,1)) - for i in eachindex(pred) - pred[i] += μ - end + pred = CUDA.zeros(Float32, X_size[1]) + CUDA.fill!(pred, μ) - bias = Tree([TreeNode(SVector{K,Float32}(μ))]) - evotree = GBTree([bias], params, Metric(), K, levels) + bias = Tree_gpu([TreeNode_gpu(Float32(μ))]) + evotree = GBTree_gpu([bias], params, Metric(), K, levels) - X_size = size(X) 𝑖_ = collect(1:X_size[1]) 𝑗_ = collect(1:X_size[2]) # initialize gradients and weights - δ, δ² = zeros(SVector{evotree.K, Float32}, X_size[1]), zeros(SVector{evotree.K, Float32}, X_size[1]) - 𝑤 = zeros(SVector{1, Float32}, X_size[1]) - 𝑤_ini = SVector{1, Float32}(1) - for i in 1:length(𝑤) - 𝑤[i] += 𝑤_ini - end + δ, δ² = CUDA.zeros(X_size[1]), CUDA.zeros(X_size[1]) + 𝑤 = CUDA.ones(X_size[1]) # binarize data into quantiles edges = get_edges(X, params.nbins) X_bin = binarize(X, edges) - + X_bin = CuArray(Int.(X_bin)) # CuArray indexing not supporting UInt8 # initializde histograms - hist_δ = Vector{Matrix{SVector{evotree.K, Float32}}}(undef, 2^params.max_depth-1) - hist_δ² = Vector{Matrix{SVector{evotree.K, Float32}}}(undef, 2^params.max_depth-1) - hist_𝑤 = Vector{Matrix{SVector{1, Float32}}}(undef, 2^params.max_depth-1) + hist_δ = [CUDA.zeros(params.nbins, X_size[2]) for i in 1:2^params.max_depth-1] + hist_δ² = [CUDA.zeros(params.nbins, X_size[2]) for i in 1:2^params.max_depth-1] + hist_𝑤 = [CUDA.zeros(params.nbins, X_size[2]) for i in 1:2^params.max_depth-1] # initialize train nodes - train_nodes = Vector{TrainNode{evotree.K, Float32, Int64}}(undef, 2^params.max_depth-1) - + train_nodes = Vector{TrainNode_gpu{Float32, Int64}}(undef, 2^params.max_depth-1) for node in 1:2^params.max_depth-1 - train_nodes[node] = TrainNode(0, 0, SVector{evotree.K, Float32}(fill(Float32(-Inf), evotree.K)), SVector{evotree.K, Float32}(fill(Float32(-Inf), evotree.K)), SVector{1, Float32}(fill(Float32(-Inf), 1)), Float32(-Inf), [0], [0]) - - hist_δ[node] = zeros(SVector{evotree.K, Float32}, params.nbins, X_size[2]) - hist_δ²[node] = zeros(SVector{evotree.K, Float32}, params.nbins, X_size[2]) - hist_𝑤[node] = zeros(SVector{1, Float32}, params.nbins, X_size[2]) + train_nodes[node] = TrainNode_gpu(0, 0, Float32(-Inf), Float32(-Inf), Float32(-Inf), Float32(-Inf), [0], [0]) end - splits = Vector{SplitInfo{evotree.K, Float32, Int64}}(undef, X_size[2]) + splits = Vector{SplitInfo_gpu{Float32, Int64}}(undef, X_size[2]) for feat in 𝑗_ - splits[feat] = SplitInfo{evotree.K, Float32, Int}(Float32(-Inf), SVector{evotree.K, Float32}(zeros(evotree.K)), SVector{evotree.K, Float32}(zeros(evotree.K)), SVector{1, Float32}(zeros(1)), SVector{evotree.K, Float32}(zeros(evotree.K)), SVector{evotree.K, Float32}(zeros(evotree.K)), SVector{1, Float32}(zeros(1)), Float32(-Inf), Float32(-Inf), 0, feat, 0.0) + splits[feat] = SplitInfo_gpu{Float32, Int}(Float32(-Inf), zero(Float32), zero(Float32), zero(Float32), zero(Float32), zero(Float32), zero(Float32), Float32(-Inf), Float32(-Inf), 0, feat, 0.0) end cache = (params=deepcopy(params), @@ -93,7 +82,7 @@ function init_evotree_gpu(params::EvoTypes, end -function grow_evotree_gpu!(evotree::GBTree, cache; verbosity=1) +function grow_evotree_gpu!(evotree::GBTree_gpu, cache; verbosity=1) # initialize from cache params = evotree.params @@ -114,14 +103,14 @@ function grow_evotree_gpu!(evotree::GBTree, cache; verbosity=1) end # build a new tree - update_grads!(params.loss, params.α, cache.pred, cache.Y, cache.δ, cache.δ², cache.𝑤) + update_grads_gpu!(params.loss, cache.pred, cache.Y, cache.δ, cache.δ², cache.𝑤) ∑δ, ∑δ², ∑𝑤 = sum(cache.δ[𝑖]), sum(cache.δ²[𝑖]), sum(cache.𝑤[𝑖]) gain = get_gain(params.loss, ∑δ, ∑δ², ∑𝑤, params.λ) # assign a root and grow tree - train_nodes[1] = TrainNode(0, 1, ∑δ, ∑δ², ∑𝑤, gain, 𝑖, 𝑗) + train_nodes[1] = TrainNode_gpu(0, 1, ∑δ, ∑δ², ∑𝑤, gain, 𝑖, 𝑗) tree = grow_tree_gpu(cache.δ, cache.δ², cache.𝑤, cache.hist_δ, cache.hist_δ², cache.hist_𝑤, params, train_nodes, splits, cache.edges, cache.X_bin) push!(evotree.trees, tree) - predict!(cache.pred, tree, cache.X) + predict_gpu!(cache.pred, tree, cache.X) end #end of nrounds @@ -135,14 +124,14 @@ end function grow_tree_gpu(δ, δ², 𝑤, hist_δ, hist_δ², hist_𝑤, params::EvoTypes, - train_nodes::Vector{TrainNode{L,T,S}}, - splits::Vector{SplitInfo{L,T,Int}}, + train_nodes::Vector{TrainNode_gpu{T,S}}, + splits::Vector{SplitInfo_gpu{T,Int}}, edges, X_bin) where {R<:Real, T<:AbstractFloat, S<:Int, L} active_id = ones(Int, 1) leaf_count = one(Int) tree_depth = one(Int) - tree = Tree(Vector{TreeNode{L, T, Int, Bool}}()) + tree = Tree_gpu(Vector{TreeNode_gpu{T, Int, Bool}}()) # grow while there are remaining active nodes while size(active_id, 1) > 0 && tree_depth <= params.max_depth @@ -151,7 +140,7 @@ function grow_tree_gpu(δ, δ², 𝑤, for id in active_id node = train_nodes[id] if tree_depth == params.max_depth || node.∑𝑤[1] <= params.min_weight + 1e-12 # rounding needed from histogram substraction - push!(tree.nodes, TreeNode(pred_leaf(params.loss, node, params, δ²))) + push!(tree.nodes, TreeNode_gpu(pred_leaf_gpu(params.loss, node, params, δ²))) else if id > 1 && id == tree.nodes[node.parent].right # println("id is right:", id) @@ -167,19 +156,19 @@ function grow_tree_gpu(δ, δ², 𝑤, find_split_gpu!(view(hist_δ[id],:,j), view(hist_δ²[id],:,j), view(hist_𝑤[id],:,j), params, node, splits[j], edges[j]) end - best = get_max_gain(splits) + best = get_max_gain_gpu(splits) # grow node if best split improves gain if best.gain > node.gain + params.γ left, right = update_set(node.𝑖, best.𝑖, view(X_bin,:,best.feat)) # println("id: ∑𝑤/length(node/left/right) / ", id, " : ", node.∑𝑤, " / ", length(node.𝑖), " / ", length(left), " / ", length(right), " / ", best.𝑖) - train_nodes[leaf_count + 1] = TrainNode(id, node.depth + 1, best.∑δL, best.∑δ²L, best.∑𝑤L, best.gainL, left, node.𝑗) - train_nodes[leaf_count + 2] = TrainNode(id, node.depth + 1, best.∑δR, best.∑δ²R, best.∑𝑤R, best.gainR, right, node.𝑗) - push!(tree.nodes, TreeNode(leaf_count + 1, leaf_count + 2, best.feat, best.cond, best.gain-node.gain, L)) + train_nodes[leaf_count + 1] = TrainNode_gpu(id, node.depth + 1, best.∑δL, best.∑δ²L, best.∑𝑤L, best.gainL, left, node.𝑗) + train_nodes[leaf_count + 2] = TrainNode_gpu(id, node.depth + 1, best.∑δR, best.∑δ²R, best.∑𝑤R, best.gainR, right, node.𝑗) + push!(tree.nodes, TreeNode_gpu(leaf_count + 1, leaf_count + 2, best.feat, best.cond, best.gain-node.gain)) push!(next_active_id, leaf_count + 1) push!(next_active_id, leaf_count + 2) leaf_count += 2 else - push!(tree.nodes, TreeNode(pred_leaf(params.loss, node, params, δ²))) + push!(tree.nodes, TreeNode_gpu(pred_leaf_gpu(params.loss, node, params, δ²))) end # end of single node split search end end # end of loop over active ids for a given depth @@ -190,7 +179,7 @@ function grow_tree_gpu(δ, δ², 𝑤, end # extract the gain value from the vector of best splits and return the split info associated with best split -function get_max_gain(splits::Vector{SplitInfo{L,T,S}}) where {L,T,S} +function get_max_gain_gpu(splits::Vector{SplitInfo_gpu{T,S}}) where {T,S} gains = (x -> x.gain).(splits) feat = findmax(gains)[2] best = splits[feat] @@ -213,11 +202,11 @@ function fit_evotree_gpu(params, X_train, Y_train; nrounds_max = params.nrounds params.nrounds = 0 - model, cache = init_evotree(params, X_train, Y_train) + model, cache = init_evotree_gpu(params, X_train, Y_train) iter = 1 if params.metric != :none && X_eval !== nothing - pred_eval = predict(model.trees[1], X_eval, model.K) + pred_eval = predict_gpu(model.trees[1], X_eval, model.K) Y_eval = convert.(eltype(cache.Y), Y_eval) end @@ -227,7 +216,7 @@ function fit_evotree_gpu(params, X_train, Y_train; # callback function if params.metric != :none if X_eval !== nothing - predict!(pred_eval, model.trees[model.params.nrounds+1], X_eval) + predict_gpu!(pred_eval, model.trees[model.params.nrounds+1], X_eval) metric_track.metric = eval_metric(Val{params.metric}(), pred_eval, Y_eval, params.α) else metric_track.metric = eval_metric(Val{params.metric}(), cache.pred, cache.Y, params.α) diff --git a/src/loss_gpu.jl b/src/loss_gpu.jl new file mode 100644 index 00000000..c3466173 --- /dev/null +++ b/src/loss_gpu.jl @@ -0,0 +1,12 @@ +# linear +function update_grads_gpu!(loss::Linear, pred::AbstractVector{T}, target::AbstractVector{T}, δ::AbstractVector{T}, δ²::AbstractVector{T}, 𝑤::AbstractVector{T}) where {T <: AbstractFloat} + @. δ = 2f0 * (pred - target) * 𝑤 + @. δ² = 2f0 * 𝑤 + return +end + +# linear +function get_gain(loss::S, ∑δ::T, ∑δ²::T, ∑𝑤::T, λ::T) where {S <: GradientRegression, T <: AbstractFloat} + gain = (∑δ ^ 2 / (∑δ² + λ * ∑𝑤)) / 2 + return gain +end diff --git a/src/predict_gpu.jl b/src/predict_gpu.jl new file mode 100644 index 00000000..04958127 --- /dev/null +++ b/src/predict_gpu.jl @@ -0,0 +1,51 @@ +# prediction from single tree - assign each observation to its final leaf +function predict_gpu!(pred, tree::Tree_gpu, X::AbstractMatrix{T}) where {T<:Real} + @inbounds @threads for i in 1:size(X,1) + id = 1 + x = view(X, i, :) + @inbounds while tree.nodes[id].split + if x[tree.nodes[id].feat] < tree.nodes[id].cond + id = tree.nodes[id].left + else + id = tree.nodes[id].right + end + end + pred[i] += tree.nodes[id].pred + end +end + +# prediction from single tree - assign each observation to its final leaf +function predict_gpu(tree::Tree_gpu, X::AbstractMatrix{T}, K) where T<:Real + pred = CUDA.zeros(size(X, 1)) + predict_gpu!(pred, tree, X) + return pred +end + +# prediction from single tree - assign each observation to its final leaf +function predict_gpu(model::GBTree_gpu, X::AbstractMatrix{T}) where T<:Real + pred = zeros(SVector{model.K,Float32}, size(X, 1)) + for tree in model.trees + predict_gpu!(pred, tree, X) + end + pred = reinterpret(Float32, pred) + if typeof(model.params.loss) == Logistic + @. pred = sigmoid(pred) + elseif typeof(model.params.loss) == Poisson + @. pred = exp(pred) + elseif typeof(model.params.loss) == Gaussian + pred = transpose(reshape(pred, 2, :)) + pred[:,2] = exp.(pred[:,2]) + elseif typeof(model.params.loss) == Softmax + pred = transpose(reshape(pred, model.K, :)) + for i in 1:size(pred,1) + pred[i,:] .= softmax(pred[i,:]) + end + end + return pred +end + + +# prediction in Leaf - GradientRegression +function pred_leaf_gpu(loss::S, node::TrainNode_gpu{T}, params::EvoTypes, δ²) where {S<:GradientRegression,T} + - params.η * node.∑δ / (node.∑δ² + params.λ * node.∑𝑤) +end diff --git a/src/structs_gpu.jl b/src/structs_gpu.jl new file mode 100644 index 00000000..2c14d318 --- /dev/null +++ b/src/structs_gpu.jl @@ -0,0 +1,54 @@ +# store perf info of each variable +mutable struct SplitInfo_gpu{T<:AbstractFloat, S<:Int} + gain::T + ∑δL::T + ∑δ²L::T + ∑𝑤L::T + ∑δR::T + ∑δ²R::T + ∑𝑤R::T + gainL::T + gainR::T + 𝑖::S + feat::S + cond::T +end + +struct TreeNode_gpu{T<:AbstractFloat, S<:Int, B<:Bool} + left::S + right::S + feat::S + cond::T + gain::T + pred::T + split::B +end + +TreeNode_gpu(left::S, right::S, feat::S, cond::T, gain::T) where {T<:AbstractFloat, S<:Int} = TreeNode_gpu(left, right, feat, cond, gain, zero(T), true) +TreeNode_gpu(pred::T) where {T} = TreeNode_gpu(0, 0, 0, zero(T), zero(T), pred, false) + +# single tree is made of a root node that containes nested nodes and leafs +struct TrainNode_gpu{T<:AbstractFloat, S<:Int} + parent::S + depth::S + ∑δ::T + ∑δ²::T + ∑𝑤::T + gain::T + 𝑖::Vector{S} + 𝑗::Vector{S} +end + +# single tree is made of a root node that containes nested nodes and leafs +struct Tree_gpu{T<:AbstractFloat, S<:Int} + nodes::Vector{TreeNode_gpu{T,S,Bool}} +end + +# gradient-boosted tree is formed by a vector of trees +struct GBTree_gpu{T<:AbstractFloat, S<:Int} + trees::Vector{Tree_gpu{T,S}} + params::EvoTypes + metric::Metric + K::Int + levels +end diff --git a/test/gpu_base.jl b/test/gpu_base.jl new file mode 100644 index 00000000..0448aa8e --- /dev/null +++ b/test/gpu_base.jl @@ -0,0 +1,89 @@ +using Statistics +using StatsBase: sample +using CUDA +using Revise +using EvoTrees +using EvoTrees: sigmoid, logit + +# prepare a dataset +features = rand(10_000) .* 5 +X = reshape(features, (size(features)[1], 1)) +Y = sin.(features) .* 0.5 .+ 0.5 +Y = logit(Y) + randn(size(Y)) +Y = sigmoid(Y) +𝑖 = collect(1:size(X,1)) +seed = 123 + +# train-eval split +𝑖_sample = sample(𝑖, size(𝑖, 1), replace = false) +train_size = 0.8 +𝑖_train = 𝑖_sample[1:floor(Int, train_size * size(𝑖, 1))] +𝑖_eval = 𝑖_sample[floor(Int, train_size * size(𝑖, 1))+1:end] + +X_train, X_eval = X[𝑖_train, :], X[𝑖_eval, :] +Y_train, Y_eval = Y[𝑖_train], Y[𝑖_eval] + +# linear +params1 = EvoTreeRegressor( + loss=:linear, metric=:mae, + nrounds=100, nbins=100, + λ = 0.5, γ=0.1, η=0.05, + max_depth = 6, min_weight = 1.0, + rowsample=0.5, colsample=1.0, seed = seed) +model = EvoTrees.fit_evotree_gpu(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) +pred_train_linear = predict(model, X_train) + +p1 = EvoTrees.predict(model, X_eval) +mean(abs.(p1 - Y_eval)) + +# logistic / cross-entropy +params1 = EvoTreeRegressor( + loss=:logistic, metric=:logloss, + nrounds=100, + λ = 0.5, γ=0.1, η=0.05, + max_depth = 6, min_weight = 1.0, + rowsample=0.5, colsample=1.0, seed = seed) +model = fit_evotree(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) +pred_train_logistic = predict(model, X_train) + +# Poisson +params1 = EvoTreeCount( + loss=:poisson, metric=:poisson, + nrounds=100, + λ = 0.5, γ=0.1, η=0.05, + max_depth = 6, min_weight = 1.0, + rowsample=0.5, colsample=1.0, seed = seed) +model = fit_evotree(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) +pred_train_poisson = predict(model, X_train) + +# L1 +params1 = EvoTreeRegressor( + loss=:L1, α=0.5, metric=:mae, + nrounds=100, nbins=100, + λ = 0.5, γ=0.0, η=0.05, + max_depth = 6, min_weight = 1.0, + rowsample=0.5, colsample=1.0, seed = seed) +model = fit_evotree(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) +pred_train_L1 = predict(model, X_train) + +# Quantiles +params1 = EvoTreeRegressor( + loss=:quantile, α=0.5, metric = :quantile, + nrounds=100, nbins=100, + λ = 0.5, γ=0.0, η=0.05, + max_depth = 6, min_weight = 1.0, + rowsample=0.5, colsample=1.0, seed = seed) +model = fit_evotree(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) +pred_train_poisson = predict(model, X_train) + +# Gaussian +params1 = EvoTreeGaussian( + loss=:gaussian, α=0.5, metric = :gaussian, + nrounds=100, nbins=100, + λ = 0.0, γ=0.0, η=0.05, + max_depth = 6, min_weight = 10.0, + rowsample=0.5, colsample=1.0, seed = seed) +model = fit_evotree(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) +pred_train_gaussian = predict(model, X_train) + +features_gain = importance(model, 1:1) diff --git a/test/hist_gpu.jl b/test/hist_gpu.jl index 238f1fef..9b335e48 100644 --- a/test/hist_gpu.jl +++ b/test/hist_gpu.jl @@ -1,6 +1,5 @@ using Revise -using CUDAnative -using CuArrays +using CUDA using StaticArrays using StatsBase: sample using BenchmarkTools @@ -21,7 +20,7 @@ function kernel1!(h, x, id) if i <= size(id, 1) && j <= size(id, 2) @inbounds k = Base._to_linear_index(h, id[i,j], j) # @inbounds k = id[i,j] + 32 * (j-1) - @inbounds CUDAnative.atomic_add!(pointer(h, k), x[i,j]) + @inbounds CUDA.atomic_add!(pointer(h, k), x[i,j]) end return end @@ -34,9 +33,9 @@ function hist_gpu1!(h::AbstractMatrix{T}, x::AbstractMatrix{T}, id; MAX_THREADS= thread_i = min(MAX_THREADS ÷ thread_j, size(id, 1)) threads = (thread_i, thread_j) blocks = ceil.(Int, (size(id, 1), size(id, 2)) .÷ threads) - println("threads:", threads) - println("blocks:", blocks) - CuArrays.@sync begin + # println("threads:", threads) + # println("blocks:", blocks) + CUDA.@sync begin @cuda blocks=blocks threads=threads kernel1!(h, x, id) end return @@ -56,12 +55,12 @@ idx_gpu = CuArray(idx) hist .- Array(hist_gpu) sum(hist) - sum(Array(hist_gpu)) -@CuArrays.time hist_gpu1!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=1024) +@CUDA.time hist_gpu1!(hist_gpu, δ_gpu, idx_gpu, MAX_THREADS=1024) @time hist_cpu!(hist, δ, idx) @btime hist_cpu!($hist, $δ, $idx) @btime hist_gpu1!($hist_gpu, $δ_gpu, $idx_gpu, MAX_THREADS=1024) # test on view -@CuArrays.time hist_gpu1!(hist_gpu, view(δ_gpu, 1:items÷2, 1:ncol÷2), view(idx_gpu, 1:items÷2, 1:ncol÷2), MAX_THREADS=1024) +@CUDA.time hist_gpu1!(hist_gpu, view(δ_gpu, 1:items÷2, 1:ncol÷2), view(idx_gpu, 1:items÷2, 1:ncol÷2), MAX_THREADS=1024) size(δ_gpu) size(view(δ_gpu, 1:items÷2, 1:ncol÷2)) @@ -74,7 +73,7 @@ function kernel2!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id, 𝑖, 𝑗) wh j = threadIdx().y + (blockIdx().y - 1) * blockDim().y if i <= length(𝑖) && j <= length(𝑗) @inbounds k = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], 𝑗[j]) - @inbounds CUDAnative.atomic_add!(pointer(h, k), x[𝑖[i], 𝑗[j]]) + @inbounds CUDA.atomic_add!(pointer(h, k), x[𝑖[i], 𝑗[j]]) end return end @@ -87,7 +86,7 @@ function hist_gpu2!(h::CuMatrix{T}, x::CuMatrix{T}, id, 𝑖, 𝑗; MAX_THREADS= blocks = ceil.(Int, (length(𝑖), length(𝑗)) ./ threads) # println("threads:", threads) # println("blocks:", blocks) - CuArrays.@sync begin + CUDA.@sync begin @cuda blocks=blocks threads=threads kernel2!(h, x, id, 𝑖, 𝑗) end return @@ -104,7 +103,7 @@ idx_gpu = CuArray(idx) 𝑖_gpu = CuArray(𝑖) 𝑗_gpu = CuArray(𝑗) -@CuArrays.time hist_gpu2!(hist_gpu, δ_gpu, idx_gpu, 𝑖_gpu, 𝑗_gpu, MAX_THREADS=1024) +@CUDA.time hist_gpu2!(hist_gpu, δ_gpu, idx_gpu, 𝑖_gpu, 𝑗_gpu, MAX_THREADS=1024) @btime hist_gpu2!($hist_gpu, $δ_gpu, $idx_gpu, 𝑖_gpu, 𝑗_gpu, MAX_THREADS=1024) @@ -115,7 +114,7 @@ function kernel!(x, y) if i <= length(x) # @inbounds x[i] += y[i] k = Base._to_linear_index(x, i) - CUDAnative.atomic_add!(pointer(x, k), y[i]) + CUDA.atomic_add!(pointer(x, k), y[i]) end return end @@ -125,7 +124,7 @@ function hist_gpu!(x, y; MAX_THREADS=1024) thread_i = min(MAX_THREADS, length(x)) threads = (thread_i) blocks = ceil.(Int, length(x) .÷ threads) - CuArrays.@sync begin + CUDA.@sync begin @cuda blocks=blocks threads=threads kernel!(x, y) end return @@ -165,7 +164,7 @@ function hist_gpuS2!(h, x, id; MAX_THREADS=256) where {T} blocks = ceil.(Int, (size(id, 1), size(id, 2)) .÷ threads) println("threads:", threads) println("blocks:", blocks) - CuArrays.@sync begin + CUDA.@sync begin @cuda blocks=blocks threads=threads kernelS2!(h, x, id) end return @@ -254,13 +253,13 @@ function kernel2!(h::CuDeviceMatrix{T}, x::CuDeviceMatrix{T}, id, nbins) where { # atomic add on global hist - 3.2ms @inbounds k = id[i,j] + nbins * (j-1) - @inbounds CUDAnative.atomic_add!(pointer(h, k), x[i,j]) + @inbounds CUDA.atomic_add!(pointer(h, k), x[i,j]) end # sync_threads() # if blockIdx().x == 1 # if tid <= nbins - # CUDAnative.atomic_add!(pointer(h,tid), shared[tid]) + # CUDA.atomic_add!(pointer(h,tid), shared[tid]) # end # end return @@ -274,13 +273,79 @@ function hist_gpu2!(h::CuMatrix{T}, x::CuMatrix{T}, id::CuMatrix{Int}, nbins; MA thread_i = min(MAX_THREADS ÷ thread_j, size(id, 1)) threads = (thread_i, thread_j) blocks = ceil.(Int, (size(id, 1), size(id, 2)) ./ threads) - CuArrays.@sync begin + CUDA.@sync begin @cuda blocks=blocks threads=threads kernel2!(h, x, id, nbins) end return h end -hist @CuArrays.time hist_gpu2!(hist_gpu, δ_gpu, idx_gpu, 32, MAX_THREADS=1024) @btime hist_gpu2!($hist_gpu, $δ_gpu, $idx_gpu, 32, MAX_THREADS=1024) @device_code_warntype hist_gpu2!(hist_gpu, δ_gpu, idx_gpu, 32, MAX_THREADS=1024) + + + + +###################################### +# Appoach 1 +###################################### +# GPU - apply along the features axis +function kernel!(h::CuDeviceMatrix{T}, x::CuDeviceVector{T}, id, 𝑖, 𝑗) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + if i <= length(𝑖) && j <= length(𝑗) + @inbounds k = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], 𝑗[j]) + @inbounds CUDA.atomic_add!(pointer(h, k), x[𝑖[i]]) + end + return +end + +# base approach - block built along the cols first, the rows (limit collisions) +function hist_gpu!(h::CuMatrix{T}, x::CuVector{T}, id, 𝑖, 𝑗; MAX_THREADS=1024) where {T<:AbstractFloat} + thread_j = min(MAX_THREADS, length(𝑗)) + thread_i = min(MAX_THREADS ÷ thread_j, length(𝑖)) + threads = (thread_i, thread_j) + blocks = ceil.(Int, (length(𝑖), length(𝑗)) ./ threads) + @cuda blocks=blocks threads=threads kernel!(h, x, id, 𝑖, 𝑗) + return +end + +hist = zeros(Float32, nbins, ncol) +δ = rand(Float32, items) +idx = rand(1:nbins, items, ncol) +𝑖 = sample(1:items, items ÷ 2, replace=false, ordered=true) +𝑗 = sample(1:ncol, ncol ÷ 2, replace=false, ordered=true) +hist_gpu = CuArray(hist) +δ_gpu = CuArray(δ) +idx_gpu = CuArray(idx) +𝑖_gpu = CuArray(𝑖) +𝑗_gpu = CuArray(𝑗) + +@CUDA.time hist_gpu!(hist_gpu, δ_gpu, idx_gpu, 𝑖_gpu, 𝑗_gpu, MAX_THREADS=1024) +@btime hist_gpu!($hist_gpu, $δ_gpu, $idx_gpu, 𝑖_gpu, 𝑗_gpu, MAX_THREADS=1024) + + +###################################### +# Appoach 2 - Loop for assigning command grad to appropriate bin per column +# Idea: exploit the fact that there's a single grad per row: take that grad and add it to each column bin +###################################### +# GPU - apply along the features axis +function kernel!(h::CuDeviceMatrix{T}, x::CuDeviceVector{T}, id, 𝑖, 𝑗) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + if i <= length(𝑖) && j <= length(𝑗) + @inbounds k = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], 𝑗[j]) + @inbounds CUDAnative.atomic_add!(pointer(h, k), x[𝑖[i]]) + end + return +end + +# base approach - block built along the cols first, the rows (limit collisions) +function hist_gpu!(h::CuMatrix{T}, x::CuVector{T}, id::CuMatrix{UInt8}, 𝑖, 𝑗; MAX_THREADS=1024) where {T<:AbstractFloat} + thread_j = min(MAX_THREADS, length(𝑗)) + thread_i = min(MAX_THREADS ÷ thread_j, length(𝑖)) + threads = (thread_i, thread_j) + blocks = ceil.(Int, (length(𝑖), length(𝑗)) ./ threads) + @cuda blocks=blocks threads=threads kernel!(h, x, id, 𝑖, 𝑗) + return +end From 03a301a7ab0e5abd802c6054ee8fea1469222781 Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Thu, 6 Aug 2020 14:29:18 -0400 Subject: [PATCH 17/29] functionnal gpu on 1-paramter gradient task --- experiments/random.jl | 8 +++++--- src/fit_gpu.jl | 33 +++++++++++++++++++++++---------- src/predict_gpu.jl | 5 ++--- test/gpu_base.jl | 17 +++++++++++++---- 4 files changed, 43 insertions(+), 20 deletions(-) diff --git a/experiments/random.jl b/experiments/random.jl index 4e600b78..0fc7a3b4 100644 --- a/experiments/random.jl +++ b/experiments/random.jl @@ -5,7 +5,7 @@ using EvoTrees using BenchmarkTools # prepare a dataset -features = rand(Int(1.25e5), 100) +features = rand(Int(1.25e6), 100) # features = rand(100, 10) X = features Y = rand(size(X, 1)) @@ -32,8 +32,10 @@ params1 = EvoTreeRegressor( # for 100k 100 rounds: 2.177 s (404031 allocations: 626.45 MiB) # for 1.25e6 no eval: 6.244 s (73955 allocations: 2.18 GiB) # for 1.25e6 mse with eval data: 6.345 s (74009 allocations: 2.18 GiB) -@time model, cache = init_evotree(params1, X_train, Y_train); -@time grow_evotree!(model, cache); +@time model, cache = EvoTrees.init_evotree_gpu(params1, X_train, Y_train); +@time EvoTrees.grow_evotree_gpu!(model, cache); +@time model = EvoTrees.fit_evotree_gpu(params1, X_train, Y_train); + @time model = fit_evotree(params1, X_train, Y_train); @btime model = fit_evotree(params1, X_train, Y_train); @time pred_train = predict(model, X_train) diff --git a/src/fit_gpu.jl b/src/fit_gpu.jl index 15a9b157..136f81fa 100644 --- a/src/fit_gpu.jl +++ b/src/fit_gpu.jl @@ -35,7 +35,9 @@ function init_evotree_gpu(params::EvoTypes, end # initialize preds + pred_cpu = zeros(Float32, X_size[1]) pred = CUDA.zeros(Float32, X_size[1]) + fill!(pred_cpu, μ) CUDA.fill!(pred, μ) bias = Tree_gpu([TreeNode_gpu(Float32(μ))]) @@ -50,8 +52,8 @@ function init_evotree_gpu(params::EvoTypes, # binarize data into quantiles edges = get_edges(X, params.nbins) - X_bin = binarize(X, edges) - X_bin = CuArray(Int.(X_bin)) # CuArray indexing not supporting UInt8 + X_bin_cpu = binarize(X, edges) + X_bin = CuArray(Int.(X_bin_cpu)) # CuArray indexing not supporting UInt8 # initializde histograms hist_δ = [CUDA.zeros(params.nbins, X_size[2]) for i in 1:2^params.max_depth-1] @@ -70,9 +72,11 @@ function init_evotree_gpu(params::EvoTypes, end cache = (params=deepcopy(params), - X=X, Y=Y, pred=pred, + X=X, Y=Y, + pred=pred, pred_cpu=pred_cpu, 𝑖_=𝑖_, 𝑗_=𝑗_, δ=δ, δ²=δ², 𝑤=𝑤, - edges=edges, X_bin=X_bin, + edges=edges, + X_bin=X_bin, X_bin_cpu=X_bin_cpu, train_nodes=train_nodes, splits=splits, hist_δ=hist_δ, hist_δ²=hist_δ², hist_𝑤=hist_𝑤) @@ -106,11 +110,13 @@ function grow_evotree_gpu!(evotree::GBTree_gpu, cache; verbosity=1) update_grads_gpu!(params.loss, cache.pred, cache.Y, cache.δ, cache.δ², cache.𝑤) ∑δ, ∑δ², ∑𝑤 = sum(cache.δ[𝑖]), sum(cache.δ²[𝑖]), sum(cache.𝑤[𝑖]) gain = get_gain(params.loss, ∑δ, ∑δ², ∑𝑤, params.λ) - # assign a root and grow tree + # # assign a root and grow tree train_nodes[1] = TrainNode_gpu(0, 1, ∑δ, ∑δ², ∑𝑤, gain, 𝑖, 𝑗) - tree = grow_tree_gpu(cache.δ, cache.δ², cache.𝑤, cache.hist_δ, cache.hist_δ², cache.hist_𝑤, params, train_nodes, splits, cache.edges, cache.X_bin) + tree = grow_tree_gpu(cache.δ, cache.δ², cache.𝑤, cache.hist_δ, cache.hist_δ², cache.hist_𝑤, params, train_nodes, splits, cache.edges, cache.X_bin, cache.X_bin_cpu) push!(evotree.trees, tree) - predict_gpu!(cache.pred, tree, cache.X) + # bad GPU usage - to be imprived! + predict_gpu!(cache.pred_cpu, tree, cache.X) + cache.pred .= CuArray(cache.pred_cpu) end #end of nrounds @@ -126,13 +132,17 @@ function grow_tree_gpu(δ, δ², 𝑤, params::EvoTypes, train_nodes::Vector{TrainNode_gpu{T,S}}, splits::Vector{SplitInfo_gpu{T,Int}}, - edges, X_bin) where {R<:Real, T<:AbstractFloat, S<:Int, L} + edges, X_bin, X_bin_cpu) where {R<:Real, T<:AbstractFloat, S<:Int, L} active_id = ones(Int, 1) leaf_count = one(Int) tree_depth = one(Int) tree = Tree_gpu(Vector{TreeNode_gpu{T, Int, Bool}}()) + hist_δ_cpu = zeros(T, size(hist_δ[1])) + hist_δ²_cpu = zeros(T, size(hist_δ²[1])) + hist_𝑤_cpu = zeros(T, size(hist_𝑤[1])) + # grow while there are remaining active nodes while size(active_id, 1) > 0 && tree_depth <= params.max_depth next_active_id = ones(Int, 0) @@ -151,15 +161,18 @@ function grow_tree_gpu(δ, δ², 𝑤, # println("id is left:", id) update_hist_gpu!(hist_δ[id], hist_δ²[id], hist_𝑤[id], δ, δ², 𝑤, X_bin, node) end + hist_δ_cpu .= hist_δ[id] + hist_δ²_cpu .= hist_δ²[id] + hist_𝑤_cpu .= hist_𝑤[id] for j in node.𝑗 splits[j].gain = node.gain - find_split_gpu!(view(hist_δ[id],:,j), view(hist_δ²[id],:,j), view(hist_𝑤[id],:,j), params, node, splits[j], edges[j]) + find_split_gpu!(view(hist_δ_cpu,:,j), view(hist_δ²_cpu,:,j), view(hist_𝑤_cpu,:,j), params, node, splits[j], edges[j]) end best = get_max_gain_gpu(splits) # grow node if best split improves gain if best.gain > node.gain + params.γ - left, right = update_set(node.𝑖, best.𝑖, view(X_bin,:,best.feat)) + left, right = update_set(node.𝑖, best.𝑖, view(X_bin_cpu,:,best.feat)) # println("id: ∑𝑤/length(node/left/right) / ", id, " : ", node.∑𝑤, " / ", length(node.𝑖), " / ", length(left), " / ", length(right), " / ", best.𝑖) train_nodes[leaf_count + 1] = TrainNode_gpu(id, node.depth + 1, best.∑δL, best.∑δ²L, best.∑𝑤L, best.gainL, left, node.𝑗) train_nodes[leaf_count + 2] = TrainNode_gpu(id, node.depth + 1, best.∑δR, best.∑δ²R, best.∑𝑤R, best.gainR, right, node.𝑗) diff --git a/src/predict_gpu.jl b/src/predict_gpu.jl index 04958127..6e28b110 100644 --- a/src/predict_gpu.jl +++ b/src/predict_gpu.jl @@ -16,18 +16,17 @@ end # prediction from single tree - assign each observation to its final leaf function predict_gpu(tree::Tree_gpu, X::AbstractMatrix{T}, K) where T<:Real - pred = CUDA.zeros(size(X, 1)) + pred = zeros(size(X, 1)) predict_gpu!(pred, tree, X) return pred end # prediction from single tree - assign each observation to its final leaf function predict_gpu(model::GBTree_gpu, X::AbstractMatrix{T}) where T<:Real - pred = zeros(SVector{model.K,Float32}, size(X, 1)) + pred = zeros(size(X, 1)) for tree in model.trees predict_gpu!(pred, tree, X) end - pred = reinterpret(Float32, pred) if typeof(model.params.loss) == Logistic @. pred = sigmoid(pred) elseif typeof(model.params.loss) == Poisson diff --git a/test/gpu_base.jl b/test/gpu_base.jl index 0448aa8e..6f010a65 100644 --- a/test/gpu_base.jl +++ b/test/gpu_base.jl @@ -25,13 +25,22 @@ Y_train, Y_eval = Y[𝑖_train], Y[𝑖_eval] # linear params1 = EvoTreeRegressor( - loss=:linear, metric=:mae, - nrounds=100, nbins=100, - λ = 0.5, γ=0.1, η=0.05, + loss=:linear, metric=:none, + nrounds=100, nbins=64, + λ = 0.0, γ=0.0, η=0.05, max_depth = 6, min_weight = 1.0, rowsample=0.5, colsample=1.0, seed = seed) + +@time model, cache = EvoTrees.init_evotree_gpu(params1, X_train, Y_train); +@time EvoTrees.grow_evotree_gpu!(model, cache); + model = EvoTrees.fit_evotree_gpu(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) -pred_train_linear = predict(model, X_train) +pred_train_linear = EvoTrees.predict_gpu(model, X_train) + +using Plots +x_perm = sortperm(X_train[:,1]) +plot(X_train, Y_train, ms = 1, mcolor = "gray", mscolor = "lightgray", background_color = RGB(1, 1, 1), seriestype=:scatter, xaxis = ("feature"), yaxis = ("target"), legend = true, label = "") +plot!(X_train[:,1][x_perm], pred_train_linear[x_perm], color = "navy", linewidth = 1.5, label = "Linear") p1 = EvoTrees.predict(model, X_eval) mean(abs.(p1 - Y_eval)) From 80b0c1aaee50db83a5fa3e3ba2bae5107d1c658e Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Sat, 8 Aug 2020 01:00:18 -0400 Subject: [PATCH 18/29] checkpopint --- experiments/random.jl | 4 +- src/find_split_gpu.jl | 71 ++++++++----- src/fit_gpu.jl | 43 ++++---- src/loss_gpu.jl | 72 ++++++++++++-- src/predict_gpu.jl | 8 +- src/structs_gpu.jl | 18 ++-- test/GPU_loss.jl | 96 ++++++++++++++++++ test/{GPU.jl => GPU_v1.jl} | 3 +- test/GPU_v2.jl | 198 +++++++++++++++++++++++++++++++++++++ test/gpu_base.jl | 15 ++- 10 files changed, 460 insertions(+), 68 deletions(-) create mode 100644 test/GPU_loss.jl rename test/{GPU.jl => GPU_v1.jl} (99%) create mode 100644 test/GPU_v2.jl diff --git a/experiments/random.jl b/experiments/random.jl index 0fc7a3b4..f7387b9e 100644 --- a/experiments/random.jl +++ b/experiments/random.jl @@ -24,7 +24,7 @@ Y_train, Y_eval = Y[𝑖_train], Y[𝑖_eval] params1 = EvoTreeRegressor( loss=:linear, metric=:none, nrounds=100, - λ = 0.0, γ=0.0, η=0.1, + λ = 1.0, γ=0.1, η=0.1, max_depth = 6, min_weight = 1.0, rowsample=0.5, colsample=0.5, nbins=32) @@ -34,6 +34,8 @@ params1 = EvoTreeRegressor( # for 1.25e6 mse with eval data: 6.345 s (74009 allocations: 2.18 GiB) @time model, cache = EvoTrees.init_evotree_gpu(params1, X_train, Y_train); @time EvoTrees.grow_evotree_gpu!(model, cache); +@time pred_train = EvoTrees.predict_gpu(model, Float32.(X_train)) +mean(pred_train) @time model = EvoTrees.fit_evotree_gpu(params1, X_train, Y_train); @time model = fit_evotree(params1, X_train, Y_train); diff --git a/src/find_split_gpu.jl b/src/find_split_gpu.jl index 0b31f239..ebca0f6e 100644 --- a/src/find_split_gpu.jl +++ b/src/find_split_gpu.jl @@ -1,68 +1,93 @@ # GPU - apply along the features axis -function kernel!(h::CuDeviceMatrix{T}, x::CuDeviceVector{T}, id, 𝑖, 𝑗) where {T<:AbstractFloat} +function hist_kernel!(h::CuDeviceArray{T,3}, x::CuDeviceMatrix{T}, id, 𝑖, 𝑗, K) where {T<:AbstractFloat} i = threadIdx().x + (blockIdx().x - 1) * blockDim().x j = threadIdx().y + (blockIdx().y - 1) * blockDim().y if i <= length(𝑖) && j <= length(𝑗) - @inbounds k = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], 𝑗[j]) - @inbounds CUDA.atomic_add!(pointer(h, k), x[𝑖[i]]) + for k in 1:K + @inbounds pt = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], k, 𝑗[j]) + @inbounds CUDA.atomic_add!(pointer(h, pt), x[𝑖[i],k]) + end + end + return +end + +# for 2D input like 𝑤 (single input) +function hist_kernel!(h::CuDeviceMatrix{T}, x::CuDeviceVector{T}, id, 𝑖, 𝑗) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + if i <= length(𝑖) && j <= length(𝑗) + @inbounds pt = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], 𝑗[j]) + @inbounds CUDA.atomic_add!(pointer(h, pt), x[𝑖[i]]) end return end # base approach - block built along the cols first, the rows (limit collisions) -function hist_gpu!(h::CuMatrix{T}, x::CuVector{T}, id::CuMatrix{Int}, 𝑖, 𝑗; MAX_THREADS=1024) where {T<:AbstractFloat} +function hist_gpu!(h_δ::CuArray{T,3}, h_δ²::CuArray{T,3}, h_𝑤::CuMatrix{T}, + δ::CuMatrix{T}, δ²::CuMatrix{T}, 𝑤::CuVector{T}, + X_bin::CuMatrix{Int}, 𝑖::CuVector{Int}, 𝑗::CuVector{Int}, K; MAX_THREADS=1024) where {T<:AbstractFloat} + + h_δ .= 0.0 + h_δ² .= 0.0 + h_𝑤 .= 0.0 + thread_j = min(MAX_THREADS, length(𝑗)) thread_i = min(MAX_THREADS ÷ thread_j, length(𝑖)) threads = (thread_i, thread_j) blocks = ceil.(Int, (length(𝑖), length(𝑗)) ./ threads) - @cuda blocks=blocks threads=threads kernel!(h, x, id, 𝑖, 𝑗) + + @cuda blocks=blocks threads=threads hist_kernel!(h_δ, δ, X_bin, 𝑖, 𝑗, K) + @cuda blocks=blocks threads=threads hist_kernel!(h_δ², δ², X_bin, 𝑖, 𝑗, K) + @cuda blocks=blocks threads=threads hist_kernel!(h_𝑤, 𝑤, X_bin, 𝑖, 𝑗) return end -function update_hist_gpu!(hist_δ::AbstractMatrix{T}, hist_δ²::AbstractMatrix{T}, hist_𝑤::AbstractMatrix{T}, - δ::AbstractVector{T}, δ²::AbstractVector{T}, 𝑤::AbstractVector{T}, - X_bin::AbstractMatrix{Int}, node::TrainNode_gpu{T,S}) where {T,S} +function update_hist_gpu!(hist_δ::Matrix{SVector{L,T}}, hist_δ²::Matrix{SVector{L,T}}, hist_𝑤::Matrix{SVector{1,T}}, + δ::Vector{SVector{L,T}}, δ²::Vector{SVector{L,T}}, 𝑤::Vector{SVector{1,T}}, + X_bin, node::TrainNode{L,T,S}) where {L,T,S} hist_δ .*= 0.0 hist_δ² .*= 0.0 hist_𝑤 .*= 0.0 - hist_gpu!(hist_δ, δ, X_bin, CuArray(node.𝑖), CuArray(node.𝑗)) - hist_gpu!(hist_δ², δ², X_bin, CuArray(node.𝑖), CuArray(node.𝑗)) - hist_gpu!(hist_𝑤, 𝑤, X_bin, CuArray(node.𝑖), CuArray(node.𝑗)) + hist_gpu!(hist_δ, δ, id) + hist_gpu!(hist_δ², δ², id) + hist_gpu!(hist_𝑤, 𝑤, id) + end -function find_split_gpu!(hist_δ::AbstractVector{T}, hist_δ²::AbstractVector{T}, hist_𝑤::AbstractVector{T}, + +function find_split_gpu!(hist_δ::AbstractMatrix{T}, hist_δ²::AbstractMatrix{T}, hist_𝑤::AbstractVector{T}, params::EvoTypes, node::TrainNode_gpu{T,S}, info::SplitInfo_gpu{T,S}, edges::Vector{T}) where {T,S} # initialize tracking - ∑δL = node.∑δ * 0 - ∑δ²L = node.∑δ² * 0 + ∑δL = node.∑δ .* 0 + ∑δ²L = node.∑δ² .* 0 ∑𝑤L = node.∑𝑤 * 0 ∑δR = node.∑δ ∑δ²R = node.∑δ² ∑𝑤R = node.∑𝑤 @inbounds for bin in 1:(length(hist_δ)-1) - ∑δL += hist_δ[bin] - ∑δ²L += hist_δ²[bin] + ∑δL .+= hist_δ[bin,:] + ∑δ²L .+= hist_δ²[bin,:] ∑𝑤L += hist_𝑤[bin] - ∑δR -= hist_δ[bin] - ∑δ²R -= hist_δ²[bin] + ∑δR .-= hist_δ[bin,:] + ∑δ²R .-= hist_δ²[bin,:] ∑𝑤R -= hist_𝑤[bin] gainL, gainR = get_gain(params.loss, ∑δL, ∑δ²L, ∑𝑤L, params.λ), get_gain(params.loss, ∑δR, ∑δ²R, ∑𝑤R, params.λ) gain = gainL + gainR - if gain > info.gain && ∑𝑤L[1] >= params.min_weight + 1e-12 && ∑𝑤R[1] >= params.min_weight + 1e-12 + if gain > info.gain && ∑𝑤L >= params.min_weight + 1e-12 && ∑𝑤R >= params.min_weight + 1e-12 info.gain = gain info.gainL = gainL info.gainR = gainR - info.∑δL = ∑δL - info.∑δ²L = ∑δ²L + info.∑δL .= ∑δL + info.∑δ²L .= ∑δ²L info.∑𝑤L = ∑𝑤L - info.∑δR = ∑δR - info.∑δ²R = ∑δ²R + info.∑δR .= ∑δR + info.∑δ²R .= ∑δ²R info.∑𝑤R = ∑𝑤R info.cond = edges[bin] info.𝑖 = bin diff --git a/src/fit_gpu.jl b/src/fit_gpu.jl index 136f81fa..938977f3 100644 --- a/src/fit_gpu.jl +++ b/src/fit_gpu.jl @@ -35,19 +35,19 @@ function init_evotree_gpu(params::EvoTypes, end # initialize preds - pred_cpu = zeros(Float32, X_size[1]) - pred = CUDA.zeros(Float32, X_size[1]) + pred_cpu = zeros(Float32, X_size[1], K) + pred = CUDA.zeros(Float32, X_size[1], K) fill!(pred_cpu, μ) CUDA.fill!(pred, μ) - bias = Tree_gpu([TreeNode_gpu(Float32(μ))]) + bias = Tree_gpu([TreeNode_gpu([Float32(μ)])]) evotree = GBTree_gpu([bias], params, Metric(), K, levels) 𝑖_ = collect(1:X_size[1]) 𝑗_ = collect(1:X_size[2]) # initialize gradients and weights - δ, δ² = CUDA.zeros(X_size[1]), CUDA.zeros(X_size[1]) + δ, δ² = CUDA.zeros(X_size[1], K), CUDA.zeros(X_size[1], K) 𝑤 = CUDA.ones(X_size[1]) # binarize data into quantiles @@ -56,23 +56,23 @@ function init_evotree_gpu(params::EvoTypes, X_bin = CuArray(Int.(X_bin_cpu)) # CuArray indexing not supporting UInt8 # initializde histograms - hist_δ = [CUDA.zeros(params.nbins, X_size[2]) for i in 1:2^params.max_depth-1] - hist_δ² = [CUDA.zeros(params.nbins, X_size[2]) for i in 1:2^params.max_depth-1] + hist_δ = [CUDA.zeros(params.nbins, K, X_size[2]) for i in 1:2^params.max_depth-1] + hist_δ² = [CUDA.zeros(params.nbins, K, X_size[2]) for i in 1:2^params.max_depth-1] hist_𝑤 = [CUDA.zeros(params.nbins, X_size[2]) for i in 1:2^params.max_depth-1] # initialize train nodes train_nodes = Vector{TrainNode_gpu{Float32, Int64}}(undef, 2^params.max_depth-1) for node in 1:2^params.max_depth-1 - train_nodes[node] = TrainNode_gpu(0, 0, Float32(-Inf), Float32(-Inf), Float32(-Inf), Float32(-Inf), [0], [0]) + train_nodes[node] = TrainNode_gpu(0, 0, zeros(Float32, K), zeros(Float32, K), Float32(-Inf), Float32(-Inf), [0], [0]) end splits = Vector{SplitInfo_gpu{Float32, Int64}}(undef, X_size[2]) for feat in 𝑗_ - splits[feat] = SplitInfo_gpu{Float32, Int}(Float32(-Inf), zero(Float32), zero(Float32), zero(Float32), zero(Float32), zero(Float32), zero(Float32), Float32(-Inf), Float32(-Inf), 0, feat, 0.0) + splits[feat] = SplitInfo_gpu{Float32, Int}(Float32(-Inf), zeros(Float32,K), zeros(Float32,K), zero(Float32), zeros(Float32,K), zeros(Float32,K), zero(Float32), Float32(-Inf), Float32(-Inf), 0, feat, 0.0) end cache = (params=deepcopy(params), - X=X, Y=Y, + X=X, Y=Y, K=K, pred=pred, pred_cpu=pred_cpu, 𝑖_=𝑖_, 𝑗_=𝑗_, δ=δ, δ²=δ², 𝑤=𝑤, edges=edges, @@ -107,12 +107,13 @@ function grow_evotree_gpu!(evotree::GBTree_gpu, cache; verbosity=1) end # build a new tree - update_grads_gpu!(params.loss, cache.pred, cache.Y, cache.δ, cache.δ², cache.𝑤) - ∑δ, ∑δ², ∑𝑤 = sum(cache.δ[𝑖]), sum(cache.δ²[𝑖]), sum(cache.𝑤[𝑖]) + update_grads_gpu!(params.loss, cache.δ, cache.δ², cache.pred, cache.Y, cache.𝑤) + # to be fixed for Gaussian - needs to account for K columns + ∑δ, ∑δ², ∑𝑤 = Array(sum(cache.δ[𝑖], dims=1)), Array(sum(cache.δ²[𝑖], dims=1)), sum(cache.𝑤[𝑖]) gain = get_gain(params.loss, ∑δ, ∑δ², ∑𝑤, params.λ) # # assign a root and grow tree train_nodes[1] = TrainNode_gpu(0, 1, ∑δ, ∑δ², ∑𝑤, gain, 𝑖, 𝑗) - tree = grow_tree_gpu(cache.δ, cache.δ², cache.𝑤, cache.hist_δ, cache.hist_δ², cache.hist_𝑤, params, train_nodes, splits, cache.edges, cache.X_bin, cache.X_bin_cpu) + tree = grow_tree_gpu(cache.δ, cache.δ², cache.𝑤, cache.hist_δ, cache.hist_δ², cache.hist_𝑤, params, cache.K, train_nodes, splits, cache.edges, cache.X_bin, cache.X_bin_cpu) push!(evotree.trees, tree) # bad GPU usage - to be imprived! predict_gpu!(cache.pred_cpu, tree, cache.X) @@ -129,10 +130,10 @@ end # grow a single tree function grow_tree_gpu(δ, δ², 𝑤, hist_δ, hist_δ², hist_𝑤, - params::EvoTypes, + params::EvoTypes, K, train_nodes::Vector{TrainNode_gpu{T,S}}, splits::Vector{SplitInfo_gpu{T,Int}}, - edges, X_bin, X_bin_cpu) where {R<:Real, T<:AbstractFloat, S<:Int, L} + edges, X_bin, X_bin_cpu) where {R<:Real, T<:AbstractFloat, S<:Int} active_id = ones(Int, 1) leaf_count = one(Int) @@ -149,7 +150,7 @@ function grow_tree_gpu(δ, δ², 𝑤, # grow nodes for id in active_id node = train_nodes[id] - if tree_depth == params.max_depth || node.∑𝑤[1] <= params.min_weight + 1e-12 # rounding needed from histogram substraction + if tree_depth == params.max_depth || node.∑𝑤 <= params.min_weight + 1e-12 # rounding needed from histogram substraction push!(tree.nodes, TreeNode_gpu(pred_leaf_gpu(params.loss, node, params, δ²))) else if id > 1 && id == tree.nodes[node.parent].right @@ -159,24 +160,30 @@ function grow_tree_gpu(δ, δ², 𝑤, hist_𝑤[id] .= hist_𝑤[node.parent] .- hist_𝑤[id-1] else # println("id is left:", id) - update_hist_gpu!(hist_δ[id], hist_δ²[id], hist_𝑤[id], δ, δ², 𝑤, X_bin, node) + # should revisite to launch all hist update within depth once since async - and then + update_hist_gpu!(hist_δ[id], hist_δ²[id], hist_𝑤[id], δ, δ², 𝑤, X_bin, CuVector(node.𝑖), CuVector(node.𝑗), K) end hist_δ_cpu .= hist_δ[id] hist_δ²_cpu .= hist_δ²[id] hist_𝑤_cpu .= hist_𝑤[id] for j in node.𝑗 splits[j].gain = node.gain - find_split_gpu!(view(hist_δ_cpu,:,j), view(hist_δ²_cpu,:,j), view(hist_𝑤_cpu,:,j), params, node, splits[j], edges[j]) + find_split_gpu!(view(hist_δ_cpu,:,:,j), view(hist_δ²_cpu,:,:,j), view(hist_𝑤_cpu,:,j), params, node, splits[j], edges[j]) end best = get_max_gain_gpu(splits) + println("tree_depth: ", tree_depth, "id: ", id) + println("best: ", best) + println("hist_𝑤_cpu: ", hist_𝑤_cpu) + println("sum(hist_δ_cpu): ", sum(hist_δ_cpu)) + println("sum(hist_δ²_cpu): ", sum(hist_δ²_cpu)) # grow node if best split improves gain if best.gain > node.gain + params.γ left, right = update_set(node.𝑖, best.𝑖, view(X_bin_cpu,:,best.feat)) # println("id: ∑𝑤/length(node/left/right) / ", id, " : ", node.∑𝑤, " / ", length(node.𝑖), " / ", length(left), " / ", length(right), " / ", best.𝑖) train_nodes[leaf_count + 1] = TrainNode_gpu(id, node.depth + 1, best.∑δL, best.∑δ²L, best.∑𝑤L, best.gainL, left, node.𝑗) train_nodes[leaf_count + 2] = TrainNode_gpu(id, node.depth + 1, best.∑δR, best.∑δ²R, best.∑𝑤R, best.gainR, right, node.𝑗) - push!(tree.nodes, TreeNode_gpu(leaf_count + 1, leaf_count + 2, best.feat, best.cond, best.gain-node.gain)) + push!(tree.nodes, TreeNode_gpu(leaf_count + 1, leaf_count + 2, best.feat, best.cond, best.gain-node.gain, K)) push!(next_active_id, leaf_count + 1) push!(next_active_id, leaf_count + 2) leaf_count += 2 diff --git a/src/loss_gpu.jl b/src/loss_gpu.jl index c3466173..3d5ee3d9 100644 --- a/src/loss_gpu.jl +++ b/src/loss_gpu.jl @@ -1,12 +1,72 @@ +##################### # linear -function update_grads_gpu!(loss::Linear, pred::AbstractVector{T}, target::AbstractVector{T}, δ::AbstractVector{T}, δ²::AbstractVector{T}, 𝑤::AbstractVector{T}) where {T <: AbstractFloat} - @. δ = 2f0 * (pred - target) * 𝑤 - @. δ² = 2f0 * 𝑤 +##################### +function kernel_linear_δ!(δ::CuDeviceMatrix{T}, p::CuDeviceMatrix{T}, t::CuDeviceVector{T}, 𝑤::CuDeviceVector{T}) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + if i <= length(t) + @inbounds δ[i] = 2 * (p[i] - t[i]) * 𝑤[i] + end return end -# linear -function get_gain(loss::S, ∑δ::T, ∑δ²::T, ∑𝑤::T, λ::T) where {S <: GradientRegression, T <: AbstractFloat} - gain = (∑δ ^ 2 / (∑δ² + λ * ∑𝑤)) / 2 +function kernel_linear_δ²!(δ²::CuDeviceMatrix{T}, p::CuDeviceMatrix{T}, t::CuDeviceVector{T}, 𝑤::CuDeviceVector{T}) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + if i <= length(t) + @inbounds δ²[i] = 2 * 𝑤[i] + end + return +end + +# base approach - block built along the cols first, the rows (limit collisions) +function update_grads_gpu!(loss::S, δ::CuMatrix{T}, δ²::CuMatrix{T}, p::CuMatrix{T}, t::CuVector{T}, 𝑤::CuVector{T}; MAX_THREADS=1024) where {S <: GradientRegression, T<:AbstractFloat} + thread_i = min(MAX_THREADS, length(t)) + threads = (thread_i) + blocks = ceil.(Int, (length(t)) ./ threads) + @cuda blocks=blocks threads=threads kernel_linear_δ!(δ, p, t, 𝑤) + @cuda blocks=blocks threads=threads kernel_linear_δ²!(δ², p, t, 𝑤) + return +end + + +# Gradient regression +function get_gain(loss::S, ∑δ::AbstractVector{T}, ∑δ²::AbstractVector{T}, ∑𝑤::T, λ::T) where {S <: GradientRegression, T <: AbstractFloat} + gain = sum((∑δ .^ 2 ./ (∑δ² .+ λ .* ∑𝑤)) ./ 2) + return gain +end + + +# Gaussian - http://jrmeyer.github.io/machinelearning/2017/08/18/mle.html +# pred[i][1] = μ +# pred[i][2] = log(σ) +function kernel_gauss_δ!(δ::CuDeviceMatrix{T}, p::CuDeviceMatrix{T}, t::CuDeviceVector{T}, 𝑤::CuDeviceVector{T}) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + if i <= length(t) + δ[i,1] = (p[i,1] - t[i]) / max(Cfloat(1e-8), exp(2f0 * p[i,2])) * 𝑤[i] + δ[i,2] = (1f0 - (p[i,1] - t[i])^2f0 / max(Cfloat(1e-8), exp(2f0 * p[i,2]))) * 𝑤[i] + end + return +end + +function kernel_gauss_δ²!(δ²::CuDeviceMatrix{T}, p::CuDeviceMatrix{T}, t::CuDeviceVector{T}, 𝑤::CuDeviceVector{T}) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + if i <= length(t) + δ²[i,1] = 𝑤[i] / max(Cfloat(1e-8), exp(2 * p[i,2])) + δ²[i,2] = 2 * 𝑤[i] / max(Cfloat(1e-8), exp(2 * p[i,2])) * (p[i,1] - target[i])^2 + end +end + +# base approach - block built along the cols first, the rows (limit collisions) +function update_grads_gpu!(loss::S, δ::CuMatrix{T}, δ²::CuMatrix{T}, p::CuMatrix{T}, t::CuVector{T}, 𝑤::CuVector{T}; MAX_THREADS=1024) where {S <: GaussianRegression, T<:AbstractFloat} + thread_i = min(MAX_THREADS, length(t)) + threads = (thread_i) + blocks = ceil.(Int, (length(t)) ./ threads) + @cuda blocks=blocks threads=threads kernel_linear_δ!(δ, p, t, 𝑤) + @cuda blocks=blocks threads=threads kernel_linear_δ²!(δ², p, t, 𝑤) + return +end + +# GaussianRegression +function get_gain(loss::S, ∑δ::T, ∑δ²::T, ∑𝑤::T, λ::T) where {S <: GaussianRegression, T <: AbstractFloat} + gain = sum((∑δ .^ 2 ./ (∑δ² .+ λ .* ∑𝑤)) ./ 2) return gain end diff --git a/src/predict_gpu.jl b/src/predict_gpu.jl index 6e28b110..71754b99 100644 --- a/src/predict_gpu.jl +++ b/src/predict_gpu.jl @@ -10,20 +10,20 @@ function predict_gpu!(pred, tree::Tree_gpu, X::AbstractMatrix{T}) where {T<:Real id = tree.nodes[id].right end end - pred[i] += tree.nodes[id].pred + @views pred[i,:] .+= tree.nodes[id].pred end end # prediction from single tree - assign each observation to its final leaf function predict_gpu(tree::Tree_gpu, X::AbstractMatrix{T}, K) where T<:Real - pred = zeros(size(X, 1)) + pred = zeros(Float32, size(X, 1)) predict_gpu!(pred, tree, X) return pred end # prediction from single tree - assign each observation to its final leaf function predict_gpu(model::GBTree_gpu, X::AbstractMatrix{T}) where T<:Real - pred = zeros(size(X, 1)) + pred = zeros(Float32, size(X, 1), 1) for tree in model.trees predict_gpu!(pred, tree, X) end @@ -46,5 +46,5 @@ end # prediction in Leaf - GradientRegression function pred_leaf_gpu(loss::S, node::TrainNode_gpu{T}, params::EvoTypes, δ²) where {S<:GradientRegression,T} - - params.η * node.∑δ / (node.∑δ² + params.λ * node.∑𝑤) + - params.η .* node.∑δ ./ (node.∑δ² .+ params.λ .* node.∑𝑤) end diff --git a/src/structs_gpu.jl b/src/structs_gpu.jl index 2c14d318..23646ca7 100644 --- a/src/structs_gpu.jl +++ b/src/structs_gpu.jl @@ -1,11 +1,11 @@ # store perf info of each variable mutable struct SplitInfo_gpu{T<:AbstractFloat, S<:Int} gain::T - ∑δL::T - ∑δ²L::T + ∑δL::Vector{T} + ∑δ²L::Vector{T} ∑𝑤L::T - ∑δR::T - ∑δ²R::T + ∑δR::Vector{T} + ∑δ²R::Vector{T} ∑𝑤R::T gainL::T gainR::T @@ -20,19 +20,19 @@ struct TreeNode_gpu{T<:AbstractFloat, S<:Int, B<:Bool} feat::S cond::T gain::T - pred::T + pred::Vector{T} split::B end -TreeNode_gpu(left::S, right::S, feat::S, cond::T, gain::T) where {T<:AbstractFloat, S<:Int} = TreeNode_gpu(left, right, feat, cond, gain, zero(T), true) -TreeNode_gpu(pred::T) where {T} = TreeNode_gpu(0, 0, 0, zero(T), zero(T), pred, false) +TreeNode_gpu(left::S, right::S, feat::S, cond::T, gain::T, K) where {T<:AbstractFloat, S<:Int} = TreeNode_gpu(left, right, feat, cond, gain, zeros(T,K), true) +TreeNode_gpu(pred::Vector{T}) where {T} = TreeNode_gpu(0, 0, 0, zero(T), zero(T), pred, false) # single tree is made of a root node that containes nested nodes and leafs struct TrainNode_gpu{T<:AbstractFloat, S<:Int} parent::S depth::S - ∑δ::T - ∑δ²::T + ∑δ::Vector{T} + ∑δ²::Vector{T} ∑𝑤::T gain::T 𝑖::Vector{S} diff --git a/test/GPU_loss.jl b/test/GPU_loss.jl new file mode 100644 index 00000000..8aa9703a --- /dev/null +++ b/test/GPU_loss.jl @@ -0,0 +1,96 @@ +using CUDA +# using Flux + +items = Int(1e6) +δ = rand(Float32, items, 1) +δ² = rand(Float32, items, 1) +𝑤 = rand(Float32, items) +pred = rand(Float32, items, 1) +target = rand(Float32, items) + +δ_gpu = CuArray(δ) +δ²_gpu = CuArray(δ²) +𝑤_gpu = CuArray(𝑤) +pred_gpu = CuArray(pred) +target_gpu = CuArray(target) + +function update_grads_gpu_linear_1!(pred::AbstractMatrix{T}, target::AbstractVector{T}, δ::AbstractMatrix{T}, δ²::AbstractMatrix{T}, 𝑤::AbstractVector{T}) where {T <: AbstractFloat} + @. δ = 2f0 * (pred - target) * 𝑤 + @. δ² = 2f0 * 𝑤 + return +end + + +function kernel_linear_δ!(δ::CuDeviceMatrix{T}, p::CuDeviceMatrix{T}, t::CuDeviceVector{T}, 𝑤::CuDeviceVector{T}) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + if i <= length(t) + @inbounds δ[i] = 2 * (p[i] - t[i]) * 𝑤[i] + end + return +end + +function kernel_linear_δ²!(δ::CuDeviceMatrix{T}, p::CuDeviceMatrix{T}, t::CuDeviceVector{T}, 𝑤::CuDeviceVector{T}) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + if i <= length(t) + @inbounds δ[i] = 2 * 𝑤[i] + end + return +end + +# base approach - block built along the cols first, the rows (limit collisions) +function grad_linear!(δ::CuMatrix{T}, δ²::CuMatrix{T}, p::CuMatrix{T}, t::CuVector{T}, 𝑤::CuVector{T}; MAX_THREADS=1024) where {T<:AbstractFloat} + thread_i = min(MAX_THREADS, length(t)) + threads = (thread_i) + blocks = ceil.(Int, (length(t)) ./ threads) + @cuda blocks=blocks threads=threads kernel_linear_δ!(δ, p, t, 𝑤) + @cuda blocks=blocks threads=threads kernel_linear_δ²!(δ², p, t, 𝑤) + return +end + +CUDA.@time update_grads_gpu_linear_1!(pred_gpu, target_gpu, δ_gpu, δ²_gpu, 𝑤_gpu) +CUDA.@time grad_linear!(δ_gpu, δ²_gpu, pred_gpu, target_gpu, 𝑤_gpu, MAX_THREADS=1024) + +################################################# +# Gaussian +################################################# +items = Int(1e6) +δ = zeros(Float32, items, 1) +δ² = zeros(Float32, items, 1) +𝑤 = rand(Float32, items) +pred = rand(Float32, items, 1) +target = rand(Float32, items) + +δ_gpu = CuArray(δ) +δ²_gpu = CuArray(δ²) +𝑤_gpu = CuArray(𝑤) +pred_gpu = CuArray(pred) +target_gpu = CuArray(target) + +function kernel_gauss_δ!(δ::CuDeviceMatrix{T}, p::CuDeviceMatrix{T}, t::CuDeviceVector{T}, 𝑤::CuDeviceVector{T}) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + if i <= length(t) + δ[i,1] = (p[i,1] - t[i]) / max(Cfloat(1e-8), exp(2f0 * p[i,2])) * 𝑤[i] + δ[i,2] = (1f0 - (p[i,1] - t[i])^2f0 / max(Cfloat(1e-8), exp(2f0 * p[i,2]))) * 𝑤[i] + end + return +end + +function kernel_gauss_δ²!(δ::CuDeviceMatrix{T}, p::CuDeviceMatrix{T}, t::CuDeviceVector{T}, 𝑤::CuDeviceVector{T}) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + if i <= length(t) + δ[i,1] = 𝑤[i] / max(Cfloat(1e-8), exp(2 * p[i,2])) + δ[i,2] = 2 * 𝑤[i] / max(Cfloat(1e-8), exp(2 * pred[i,2])) * (p[i,1] - target[i])^2 + end +end + +# base approach - block built along the cols first, the rows (limit collisions) +function grad_gaussian!(δ::CuMatrix{T}, δ²::CuMatrix{T}, p::CuMatrix{T}, t::CuVector{T}, 𝑤::CuVector{T}; MAX_THREADS=1024) where {T<:AbstractFloat} + thread_i = min(MAX_THREADS, length(t)) + threads = (thread_i) + blocks = ceil.(Int, (length(t)) ./ threads) + @cuda blocks=blocks threads=threads kernel_linear_δ!(δ, p, t, 𝑤) + @cuda blocks=blocks threads=threads kernel_linear_δ²!(δ², p, t, 𝑤) + return +end + +CUDA.@time grad_gaussian!(δ_gpu, δ²_gpu, pred_gpu, target_gpu, 𝑤_gpu, MAX_THREADS=1024) diff --git a/test/GPU.jl b/test/GPU_v1.jl similarity index 99% rename from test/GPU.jl rename to test/GPU_v1.jl index f82303e0..c2398e13 100644 --- a/test/GPU.jl +++ b/test/GPU_v1.jl @@ -1,6 +1,5 @@ # using CUDA -using CUDAnative -using CuArrays +using CUDA # using Flux # using GeometricFlux diff --git a/test/GPU_v2.jl b/test/GPU_v2.jl new file mode 100644 index 00000000..b1be88a0 --- /dev/null +++ b/test/GPU_v2.jl @@ -0,0 +1,198 @@ +# using CUDA +using CUDA +# using Flux +# using GeometricFlux + +nbins = 32 +ncol = 100 +items = Int(1e6) +hist = zeros(Float32, nbins, ncol) +δ = rand(Float32, items) +idx = rand(1:nbins, items, ncol) +𝑖 = collect(1:items) +𝑗 = collect(1:ncol) + +hist_gpu = CuArray(hist) +δ_gpu = CuArray(δ) +idx_gpu = CuArray(idx) +𝑖_gpu = CuArray(𝑖) +𝑗_gpu = CuArray(𝑗) + +# CPU +function hist_cpu!(hist, δ, idx, 𝑖, 𝑗) + Threads.@threads for j in 𝑗 + @inbounds for i in 𝑖 + hist[idx[i], j] += δ[i] + end + end + return +end + +function kernel_1!(h::CuDeviceMatrix{T}, x::CuDeviceVector{T}, id, 𝑖, 𝑗) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + if i <= length(𝑖) && j <= length(𝑗) + @inbounds k = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], 𝑗[j]) + @inbounds CUDA.atomic_add!(pointer(h, k), x[𝑖[i]]) + end + return +end + +# base approach - block built along the cols first, the rows (limit collisions) +function hist_gpu_1!(h::CuMatrix{T}, x::CuVector{T}, id::CuMatrix{Int}, 𝑖, 𝑗; MAX_THREADS=1024) where {T<:AbstractFloat} + thread_j = min(MAX_THREADS, length(𝑗)) + thread_i = min(MAX_THREADS ÷ thread_j, length(𝑖)) + threads = (thread_i, thread_j) + blocks = ceil.(Int, (length(𝑖), length(𝑗)) ./ threads) + @cuda blocks=blocks threads=threads kernel_1!(h, x, id, 𝑖, 𝑗) + return +end + +@time hist_cpu!(hist, δ, idx) +CUDA.@time hist_gpu_1!(hist_gpu, δ_gpu, idx_gpu, 𝑖_gpu, 𝑗_gpu, MAX_THREADS=1024) + + + + +nbins = 32 +ncol = 100 +items = Int(2e6) +K = 1 +hist = zeros(Float32, nbins, 3, ncol) +δ = rand(Float32, items, 3) +idx = rand(1:nbins, items, ncol) +𝑖 = collect(1:items) +𝑗 = collect(1:ncol) + +hist_gpu = CuArray(hist) +δ_gpu = CuArray(δ) +idx_gpu = CuArray(idx) +𝑖_gpu = CuArray(𝑖) +𝑗_gpu = CuArray(𝑗) + +function kernel_2!(h::CuDeviceArray{T,3}, x::CuDeviceMatrix{T}, id, 𝑖, 𝑗) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + if i <= length(𝑖) && j <= length(𝑗) + @inbounds k1 = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], 1, 𝑗[j]) + @inbounds CUDA.atomic_add!(pointer(h, k1), x[𝑖[i],1]) + @inbounds k2 = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], 2, 𝑗[j]) + @inbounds CUDA.atomic_add!(pointer(h, k2), x[𝑖[i],2]) + @inbounds k3 = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], 3, 𝑗[j]) + @inbounds CUDA.atomic_add!(pointer(h, k3), x[𝑖[i],3]) + end + return +end + +# base approach - block built along the cols first, the rows (limit collisions) +function hist_gpu_2!(h::CuArray{T,3}, x::CuMatrix{T}, id::CuMatrix{Int}, 𝑖, 𝑗; MAX_THREADS=1024) where {T<:AbstractFloat} + thread_j = min(MAX_THREADS, length(𝑗)) + thread_i = min(MAX_THREADS ÷ thread_j, length(𝑖)) + threads = (thread_i, thread_j) + blocks = ceil.(Int, (length(𝑖), length(𝑗)) ./ threads) + @cuda blocks=blocks threads=threads kernel_2!(h, x, id, 𝑖, 𝑗) + return +end + +CUDA.@time hist_gpu_2!(hist_gpu, δ_gpu, idx_gpu, 𝑖_gpu, 𝑗_gpu, MAX_THREADS=1024) + +hist_gpu_1 = Array(hist_gpu) +hist_gpu_2 = Array(hist_gpu) +diff1 = hist_gpu_2 - hist_gpu_1 + +###################################################################################################### +# best approach: loop on K indicators +###################################################################################################### +function kernel_3!(h::CuDeviceArray{T,3}, x::CuDeviceMatrix{T}, id, 𝑖, 𝑗, K) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + if i <= length(𝑖) && j <= length(𝑗) + for k in 1:K + @inbounds pt = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], k, 𝑗[j]) + @inbounds CUDA.atomic_add!(pointer(h, pt), x[𝑖[i],k]) + end + end + return +end + +# base approach - block built along the cols first, the rows (limit collisions) +function hist_gpu_3!(h::CuArray{T,3}, x::CuMatrix{T}, id::CuMatrix{Int}, 𝑖, 𝑗, K; MAX_THREADS=1024) where {T<:AbstractFloat} + thread_j = min(MAX_THREADS, length(𝑗)) + thread_i = min(MAX_THREADS ÷ thread_j, length(𝑖)) + threads = (thread_i, thread_j) + blocks = ceil.(Int, (length(𝑖), length(𝑗)) ./ threads) + @cuda blocks=blocks threads=threads kernel_3!(h, x, id, 𝑖, 𝑗, K) + return +end + +hist_gpu_1 = Array(hist_gpu) +hist_gpu_2 = Array(hist_gpu) +diff2 = hist_gpu_2 - hist_gpu_1 +diff2 - diff1 + +CUDA.@time hist_gpu_3!(hist_gpu, δ_gpu, idx_gpu, 𝑖_gpu, 𝑗_gpu, 3, MAX_THREADS=1024) + + + +###################################################################################################### +# 3D kernel - instead of iterating on K - Less efficient than the loop on Ks +###################################################################################################### +function kernel_3D!(h::CuDeviceArray{T,3}, x::CuDeviceMatrix{T}, id, 𝑖, 𝑗, K) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + k = threadIdx().z + (blockIdx().z - 1) * blockDim().z + if i <= length(𝑖) && j <= length(𝑗) + @inbounds pt = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], k, 𝑗[j]) + @inbounds CUDA.atomic_add!(pointer(h, pt), x[𝑖[i],k]) + end + return +end + +# base approach - block built along the cols first, the rows (limit collisions) +function hist_gpu_3D!(h::CuArray{T,3}, x::CuMatrix{T}, id::CuMatrix{Int}, 𝑖, 𝑗, K; MAX_THREADS=1024) where {T<:AbstractFloat} + thread_k = min(MAX_THREADS, K) + thread_j = min(MAX_THREADS ÷ thread_k, length(𝑗)) + thread_i = min(MAX_THREADS ÷ (thread_k * thread_j), length(𝑖)) + threads = (thread_i, thread_j, thread_k) + blocks = ceil.(Int, (length(𝑖), length(𝑗), K) ./ threads) + @cuda blocks=blocks threads=threads kernel_3D!(h, x, id, 𝑖, 𝑗, K) + return +end + +CUDA.@time hist_gpu_3D!(hist_gpu, δ_gpu, idx_gpu, 𝑖_gpu, 𝑗_gpu, 3, MAX_THREADS=1024) + +hist_gpu_1 = Array(hist_gpu) +hist_gpu_2 = Array(hist_gpu) +diff1 = hist_gpu_2 - hist_gpu_1 + + +###################################################################################################### +# 3D kernel - instead of iterating on K - No collision approach - single i thread - bad! +###################################################################################################### +function kernel_3D2!(h::CuDeviceArray{T,3}, x::CuDeviceMatrix{T}, id, 𝑖, 𝑗, K) where {T<:AbstractFloat} + i = threadIdx().x + (blockIdx().x - 1) * blockDim().x + j = threadIdx().y + (blockIdx().y - 1) * blockDim().y + k = threadIdx().z + (blockIdx().z - 1) * blockDim().z + if i <= length(𝑖) && j <= length(𝑗) + # @inbounds pt = Base._to_linear_index(h, id[𝑖[i], 𝑗[j]], k, 𝑗[j]) + @inbounds h[id[𝑖[i], 𝑗[j]], k, 𝑗[j]] += x[𝑖[i],k] + end + return +end + +# base approach - block built along the cols first, the rows (limit collisions) +function hist_gpu_3D2!(h::CuArray{T,3}, x::CuMatrix{T}, id::CuMatrix{Int}, 𝑖, 𝑗, K; MAX_THREADS=1024) where {T<:AbstractFloat} + thread_k = min(MAX_THREADS, K) + thread_j = min(MAX_THREADS ÷ thread_k, length(𝑗)) + thread_i = 1 + threads = (thread_i, thread_j, thread_k) + blocks = ceil.(Int, (length(𝑖), length(𝑗), K) ./ threads) + @cuda blocks=blocks threads=threads kernel_3D2!(h, x, id, 𝑖, 𝑗, K) + return +end + +CUDA.@time hist_gpu_3D2!(hist_gpu, δ_gpu, idx_gpu, 𝑖_gpu, 𝑗_gpu, 3, MAX_THREADS=1024) + +hist_gpu_1 = Array(hist_gpu) +hist_gpu_2 = Array(hist_gpu) +diff1 = hist_gpu_2 - hist_gpu_1 diff --git a/test/gpu_base.jl b/test/gpu_base.jl index 6f010a65..201b3fc8 100644 --- a/test/gpu_base.jl +++ b/test/gpu_base.jl @@ -14,6 +14,9 @@ Y = sigmoid(Y) 𝑖 = collect(1:size(X,1)) seed = 123 +# linear curve +Y = 0.2 .* X + randn(size(Y)) ./ 10 + # train-eval split 𝑖_sample = sample(𝑖, size(𝑖, 1), replace = false) train_size = 0.8 @@ -26,16 +29,18 @@ Y_train, Y_eval = Y[𝑖_train], Y[𝑖_eval] # linear params1 = EvoTreeRegressor( loss=:linear, metric=:none, - nrounds=100, nbins=64, - λ = 0.0, γ=0.0, η=0.05, - max_depth = 6, min_weight = 1.0, - rowsample=0.5, colsample=1.0, seed = seed) + nrounds=1, nbins=10, + λ = 0.0, γ=0.0, η=1.0, + max_depth = 3, min_weight = 1.0, + rowsample=1.0, colsample=1.0, seed = seed) @time model, cache = EvoTrees.init_evotree_gpu(params1, X_train, Y_train); @time EvoTrees.grow_evotree_gpu!(model, cache); - model = EvoTrees.fit_evotree_gpu(params1, X_train, Y_train, X_eval = X_eval, Y_eval = Y_eval, print_every_n = 25) + pred_train_linear = EvoTrees.predict_gpu(model, X_train) +pred_train_linear = reshape(pred_train_linear, :) +mean(pred_train_linear) using Plots x_perm = sortperm(X_train[:,1]) From 3ac98774a73befc1e6870a876956538320d1dc0d Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Sat, 8 Aug 2020 04:13:39 -0400 Subject: [PATCH 19/29] alpha --- experiments/random.jl | 2 +- src/find_split_gpu.jl | 66 ++++++++++++++++++++++++++----------------- src/fit_gpu.jl | 12 ++++---- src/predict_gpu.jl | 1 + test/gpu_base.jl | 12 ++++---- 5 files changed, 53 insertions(+), 40 deletions(-) diff --git a/experiments/random.jl b/experiments/random.jl index f7387b9e..de95857e 100644 --- a/experiments/random.jl +++ b/experiments/random.jl @@ -5,7 +5,7 @@ using EvoTrees using BenchmarkTools # prepare a dataset -features = rand(Int(1.25e6), 100) +features = rand(Int(2.5e6), 100) # features = rand(100, 10) X = features Y = rand(size(X, 1)) diff --git a/src/find_split_gpu.jl b/src/find_split_gpu.jl index ebca0f6e..e6c044e1 100644 --- a/src/find_split_gpu.jl +++ b/src/find_split_gpu.jl @@ -11,7 +11,7 @@ function hist_kernel!(h::CuDeviceArray{T,3}, x::CuDeviceMatrix{T}, id, 𝑖, return end -# for 2D input like 𝑤 (single input) +# for 2D input like 𝑤 function hist_kernel!(h::CuDeviceMatrix{T}, x::CuDeviceVector{T}, id, 𝑖, 𝑗) where {T<:AbstractFloat} i = threadIdx().x + (blockIdx().x - 1) * blockDim().x j = threadIdx().y + (blockIdx().y - 1) * blockDim().y @@ -23,51 +23,63 @@ function hist_kernel!(h::CuDeviceMatrix{T}, x::CuDeviceVector{T}, id, 𝑖, 𝑗 end # base approach - block built along the cols first, the rows (limit collisions) -function hist_gpu!(h_δ::CuArray{T,3}, h_δ²::CuArray{T,3}, h_𝑤::CuMatrix{T}, +function update_hist_gpu!(hδ::CuArray{T,3}, hδ²::CuArray{T,3}, h𝑤::CuMatrix{T}, δ::CuMatrix{T}, δ²::CuMatrix{T}, 𝑤::CuVector{T}, X_bin::CuMatrix{Int}, 𝑖::CuVector{Int}, 𝑗::CuVector{Int}, K; MAX_THREADS=1024) where {T<:AbstractFloat} - h_δ .= 0.0 - h_δ² .= 0.0 - h_𝑤 .= 0.0 + hδ .*= 0.0 + hδ² .*= 0.0 + h𝑤 .*= 0.0 thread_j = min(MAX_THREADS, length(𝑗)) thread_i = min(MAX_THREADS ÷ thread_j, length(𝑖)) threads = (thread_i, thread_j) blocks = ceil.(Int, (length(𝑖), length(𝑗)) ./ threads) + @cuda blocks=blocks threads=threads hist_kernel!(hδ, δ, X_bin, 𝑖, 𝑗, K) + @cuda blocks=blocks threads=threads hist_kernel!(hδ², δ², X_bin, 𝑖, 𝑗, K) + @cuda blocks=blocks threads=threads hist_kernel!(h𝑤, 𝑤, X_bin, 𝑖, 𝑗) - @cuda blocks=blocks threads=threads hist_kernel!(h_δ, δ, X_bin, 𝑖, 𝑗, K) - @cuda blocks=blocks threads=threads hist_kernel!(h_δ², δ², X_bin, 𝑖, 𝑗, K) - @cuda blocks=blocks threads=threads hist_kernel!(h_𝑤, 𝑤, X_bin, 𝑖, 𝑗) return end - -function update_hist_gpu!(hist_δ::Matrix{SVector{L,T}}, hist_δ²::Matrix{SVector{L,T}}, hist_𝑤::Matrix{SVector{1,T}}, - δ::Vector{SVector{L,T}}, δ²::Vector{SVector{L,T}}, 𝑤::Vector{SVector{1,T}}, - X_bin, node::TrainNode{L,T,S}) where {L,T,S} - - hist_δ .*= 0.0 - hist_δ² .*= 0.0 - hist_𝑤 .*= 0.0 - - hist_gpu!(hist_δ, δ, id) - hist_gpu!(hist_δ², δ², id) - hist_gpu!(hist_𝑤, 𝑤, id) - -end +# +# # base approach - block built along the cols first, the rows (limit collisions) +# function hist_gpu!(h::CuMatrix{T}, x::CuVector{T}, X_bin::CuMatrix{Int}, 𝑖::CuVector{Int}, 𝑗::CuVector{Int}; MAX_THREADS=1024) where {T<:AbstractFloat} +# thread_j = min(MAX_THREADS, length(𝑗)) +# thread_i = min(MAX_THREADS ÷ thread_j, length(𝑖)) +# threads = (thread_i, thread_j) +# blocks = ceil.(Int, (length(𝑖), length(𝑗)) ./ threads) +# @cuda blocks=blocks threads=threads hist_kernel!(h, x, X_bin, 𝑖, 𝑗) +# return +# end +# +# function update_hist_gpu!(hist_δ::AbstractArray{T,3}, hist_δ²::AbstractArray{T,3}, hist_𝑤::AbstractMatrix{T}, +# δ::AbstractMatrix{T}, δ²::AbstractMatrix{T}, 𝑤::AbstractVector{T}, +# X_bin::AbstractMatrix{Int}, node::TrainNode_gpu{T,S}, K) where {T,S} +# +# hist_δ .*= 0.0 +# hist_δ² .*= 0.0 +# hist_𝑤 .*= 0.0 +# +# hist_gpu!(hist_δ, δ, X_bin, CuArray(node.𝑖), CuArray(node.𝑗), K) +# hist_gpu!(hist_δ², δ², X_bin, CuArray(node.𝑖), CuArray(node.𝑗), K) +# hist_gpu!(hist_𝑤, 𝑤, X_bin, CuArray(node.𝑖), CuArray(node.𝑗)) +# end function find_split_gpu!(hist_δ::AbstractMatrix{T}, hist_δ²::AbstractMatrix{T}, hist_𝑤::AbstractVector{T}, params::EvoTypes, node::TrainNode_gpu{T,S}, info::SplitInfo_gpu{T,S}, edges::Vector{T}) where {T,S} # initialize tracking - ∑δL = node.∑δ .* 0 - ∑δ²L = node.∑δ² .* 0 + ∑δL = copy(node.∑δ) .* 0 + ∑δ²L = copy(node.∑δ²) .* 0 ∑𝑤L = node.∑𝑤 * 0 - ∑δR = node.∑δ - ∑δ²R = node.∑δ² + ∑δR = copy(node.∑δ) + ∑δ²R = copy(node.∑δ²) ∑𝑤R = node.∑𝑤 + # println("∑δ²L: ", ∑δ²L, " ∑δ²R:", ∑δ²R) + # println("hist_δ²: ", hist_δ²) + @inbounds for bin in 1:(length(hist_δ)-1) ∑δL .+= hist_δ[bin,:] ∑δ²L .+= hist_δ²[bin,:] @@ -76,6 +88,8 @@ function find_split_gpu!(hist_δ::AbstractMatrix{T}, hist_δ²::AbstractMatrix{T ∑δ²R .-= hist_δ²[bin,:] ∑𝑤R -= hist_𝑤[bin] + # println("∑δ²L: ", ∑δ²L, " | ∑δ²R:", ∑δ²R, " | hist_δ²[bin,:]: ", hist_δ²[bin,:]) + gainL, gainR = get_gain(params.loss, ∑δL, ∑δ²L, ∑𝑤L, params.λ), get_gain(params.loss, ∑δR, ∑δ²R, ∑𝑤R, params.λ) gain = gainL + gainR diff --git a/src/fit_gpu.jl b/src/fit_gpu.jl index 938977f3..b38bbb16 100644 --- a/src/fit_gpu.jl +++ b/src/fit_gpu.jl @@ -163,26 +163,24 @@ function grow_tree_gpu(δ, δ², 𝑤, # should revisite to launch all hist update within depth once since async - and then update_hist_gpu!(hist_δ[id], hist_δ²[id], hist_𝑤[id], δ, δ², 𝑤, X_bin, CuVector(node.𝑖), CuVector(node.𝑗), K) end + hist_δ_cpu .= hist_δ[id] hist_δ²_cpu .= hist_δ²[id] hist_𝑤_cpu .= hist_𝑤[id] + for j in node.𝑗 splits[j].gain = node.gain find_split_gpu!(view(hist_δ_cpu,:,:,j), view(hist_δ²_cpu,:,:,j), view(hist_𝑤_cpu,:,j), params, node, splits[j], edges[j]) end best = get_max_gain_gpu(splits) - println("tree_depth: ", tree_depth, "id: ", id) - println("best: ", best) - println("hist_𝑤_cpu: ", hist_𝑤_cpu) - println("sum(hist_δ_cpu): ", sum(hist_δ_cpu)) - println("sum(hist_δ²_cpu): ", sum(hist_δ²_cpu)) + # grow node if best split improves gain if best.gain > node.gain + params.γ left, right = update_set(node.𝑖, best.𝑖, view(X_bin_cpu,:,best.feat)) # println("id: ∑𝑤/length(node/left/right) / ", id, " : ", node.∑𝑤, " / ", length(node.𝑖), " / ", length(left), " / ", length(right), " / ", best.𝑖) - train_nodes[leaf_count + 1] = TrainNode_gpu(id, node.depth + 1, best.∑δL, best.∑δ²L, best.∑𝑤L, best.gainL, left, node.𝑗) - train_nodes[leaf_count + 2] = TrainNode_gpu(id, node.depth + 1, best.∑δR, best.∑δ²R, best.∑𝑤R, best.gainR, right, node.𝑗) + train_nodes[leaf_count + 1] = TrainNode_gpu(id, node.depth + 1, copy(best.∑δL), copy(best.∑δ²L), best.∑𝑤L, best.gainL, left, node.𝑗) + train_nodes[leaf_count + 2] = TrainNode_gpu(id, node.depth + 1, copy(best.∑δR), copy(best.∑δ²R), best.∑𝑤R, best.gainR, right, node.𝑗) push!(tree.nodes, TreeNode_gpu(leaf_count + 1, leaf_count + 2, best.feat, best.cond, best.gain-node.gain, K)) push!(next_active_id, leaf_count + 1) push!(next_active_id, leaf_count + 2) diff --git a/src/predict_gpu.jl b/src/predict_gpu.jl index 71754b99..92a02277 100644 --- a/src/predict_gpu.jl +++ b/src/predict_gpu.jl @@ -11,6 +11,7 @@ function predict_gpu!(pred, tree::Tree_gpu, X::AbstractMatrix{T}) where {T<:Real end end @views pred[i,:] .+= tree.nodes[id].pred + # pred[i] += tree.nodes[id].pred[1] end end diff --git a/test/gpu_base.jl b/test/gpu_base.jl index 201b3fc8..12a9c769 100644 --- a/test/gpu_base.jl +++ b/test/gpu_base.jl @@ -4,6 +4,7 @@ using CUDA using Revise using EvoTrees using EvoTrees: sigmoid, logit +using Plots # prepare a dataset features = rand(10_000) .* 5 @@ -15,7 +16,7 @@ Y = sigmoid(Y) seed = 123 # linear curve -Y = 0.2 .* X + randn(size(Y)) ./ 10 +# Y = 0.2 .* X + randn(size(Y)) ./ 10 # train-eval split 𝑖_sample = sample(𝑖, size(𝑖, 1), replace = false) @@ -29,10 +30,10 @@ Y_train, Y_eval = Y[𝑖_train], Y[𝑖_eval] # linear params1 = EvoTreeRegressor( loss=:linear, metric=:none, - nrounds=1, nbins=10, - λ = 0.0, γ=0.0, η=1.0, - max_depth = 3, min_weight = 1.0, - rowsample=1.0, colsample=1.0, seed = seed) + nrounds=100, nbins=100, + λ = 0.2, γ=0.1, η=0.05, + max_depth = 6, min_weight = 1.0, + rowsample=0.5, colsample=1.0, seed = seed) @time model, cache = EvoTrees.init_evotree_gpu(params1, X_train, Y_train); @time EvoTrees.grow_evotree_gpu!(model, cache); @@ -42,7 +43,6 @@ pred_train_linear = EvoTrees.predict_gpu(model, X_train) pred_train_linear = reshape(pred_train_linear, :) mean(pred_train_linear) -using Plots x_perm = sortperm(X_train[:,1]) plot(X_train, Y_train, ms = 1, mcolor = "gray", mscolor = "lightgray", background_color = RGB(1, 1, 1), seriestype=:scatter, xaxis = ("feature"), yaxis = ("target"), legend = true, label = "") plot!(X_train[:,1][x_perm], pred_train_linear[x_perm], color = "navy", linewidth = 1.5, label = "Linear") From 09d095237a9efa7bbadf27704b952081f3b071c1 Mon Sep 17 00:00:00 2001 From: jeremiedb Date: Sat, 8 Aug 2020 04:20:08 -0400 Subject: [PATCH 20/29] up --- src/predict_gpu.jl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/predict_gpu.jl b/src/predict_gpu.jl index 92a02277..71754b99 100644 --- a/src/predict_gpu.jl +++ b/src/predict_gpu.jl @@ -11,7 +11,6 @@ function predict_gpu!(pred, tree::Tree_gpu, X::AbstractMatrix{T}) where {T<:Real end end @views pred[i,:] .+= tree.nodes[id].pred - # pred[i] += tree.nodes[id].pred[1] end end From 20a3cac40b1e5349dba055415ca2a6eb31daa83b Mon Sep 17 00:00:00 2001 From: "jeremie.db" Date: Sun, 9 Aug 2020 17:40:25 -0400 Subject: [PATCH 21/29] up --- experiments/random.jl | 6 ++++-- src/models.jl | 18 ++++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/experiments/random.jl b/experiments/random.jl index de95857e..10925342 100644 --- a/experiments/random.jl +++ b/experiments/random.jl @@ -5,7 +5,7 @@ using EvoTrees using BenchmarkTools # prepare a dataset -features = rand(Int(2.5e6), 100) +features = rand(Int(1.25e6), 100) # features = rand(100, 10) X = features Y = rand(size(X, 1)) @@ -37,6 +37,7 @@ params1 = EvoTreeRegressor( @time pred_train = EvoTrees.predict_gpu(model, Float32.(X_train)) mean(pred_train) @time model = EvoTrees.fit_evotree_gpu(params1, X_train, Y_train); +@time model = fit_evotree(params1, X_train, Y_train); @time model = fit_evotree(params1, X_train, Y_train); @btime model = fit_evotree(params1, X_train, Y_train); @@ -48,11 +49,12 @@ using XGBoost num_round = 100 param = ["max_depth" => 5, "eta" => 0.05, - "objective" => "reg:linear", + "objective" => "reg:squarederror", "print_every_n" => 5, "subsample" => 0.5, "colsample_bytree" => 0.5, "tree_method" => "hist", + "nthread" => 16, "max_bin" => 32] metrics = ["rmse"] @time xgboost(X_train, num_round, label = Y_train, param = param, metrics=metrics, silent=1); diff --git a/src/models.jl b/src/models.jl index cfdcb52b..6b581c48 100644 --- a/src/models.jl +++ b/src/models.jl @@ -12,6 +12,10 @@ struct Quantile <: QuantileRegression end struct Softmax <: MultiClassRegression end struct Gaussian <: GaussianRegression end +# make a Random Number Generator object +mk_rng(rng::Random.AbstractRNG) = rng +mk_rng(rng::T) where T <: Integer = Random.MersenneTwister(rng) + mutable struct EvoTreeRegressor{T<:AbstractFloat, U<:ModelType, S<:Int} <: MLJModelInterface.Deterministic loss::U nrounds::S @@ -41,7 +45,7 @@ function EvoTreeRegressor(; nbins=64, α=0.5, metric=:mse, - seed=444) + rng=444) if loss == :linear model_type = Linear() elseif loss == :logistic model_type = Logistic() @@ -49,7 +53,9 @@ function EvoTreeRegressor(; elseif loss == :quantile model_type = Quantile() end - model = EvoTreeRegressor(model_type, nrounds, Float32(λ), Float32(γ), Float32(η), max_depth, Float32(min_weight), Float32(rowsample), Float32(colsample), nbins, Float32(α), metric, seed) + rng = mk_rng(rng)::Random.AbstractRNG + + model = EvoTreeRegressor(model_type, nrounds, Float32(λ), Float32(γ), Float32(η), max_depth, Float32(min_weight), Float32(rowsample), Float32(colsample), nbins, Float32(α), metric, rng) return model end @@ -86,6 +92,8 @@ function EvoTreeCount(; metric=:poisson, seed=444) + rng = mk_rng(rng)::Random.AbstractRNG + if loss == :poisson model_type = Poisson() end model = EvoTreeCount(Poisson(), nrounds, Float32(λ), Float32(γ), Float32(η), max_depth, Float32(min_weight), Float32(rowsample), Float32(colsample), nbins, Float32(α), metric, seed) @@ -124,6 +132,8 @@ function EvoTreeClassifier(; metric=:mlogloss, seed=444) + rng = mk_rng(rng)::Random.AbstractRNG + if loss == :softmax model_type = Softmax() end model = EvoTreeClassifier(Softmax(), nrounds, Float32(λ), Float32(γ), Float32(η), max_depth, Float32(min_weight), Float32(rowsample), Float32(colsample), nbins, Float32(α), metric, seed) @@ -162,6 +172,8 @@ function EvoTreeGaussian(; metric=:gaussian, seed=444) + rng = mk_rng(rng)::Random.AbstractRNG + if loss == :gaussian model_type = Gaussian() end model = EvoTreeGaussian(Gaussian(), nrounds, Float32(λ), Float32(γ), Float32(η), max_depth, Float32(min_weight), Float32(rowsample), Float32(colsample), nbins, Float32(α), metric, seed) @@ -185,6 +197,8 @@ function EvoTreeRModels( metric, seed) + rng = mk_rng(rng)::Random.AbstractRNG + if loss ∈ [:linear, :L1, :logistic, :quantile] if loss == :linear model_type = Linear() elseif loss == :logistic model_type = Logistic() From 6fb7f3392c08b9b838e63b0314b62adf149f0e87 Mon Sep 17 00:00:00 2001 From: "jeremie.db" Date: Mon, 10 Aug 2020 00:48:18 -0400 Subject: [PATCH 22/29] alpha for linear & gaussian --- README.md | 6 +- {test => experiments}/GPU_loss.jl | 0 {test => experiments}/GPU_v2.jl | 0 experiments/gaussian.jl | 14 +-- {test => experiments}/hist_gpu.jl | 0 {test => experiments}/loss_gpu.jl | 0 experiments/random.jl | 29 +++++- experiments/readme_plots.jl | 29 +++--- figures/gaussian_sinus.png | Bin 0 -> 44517 bytes figures/quantiles_sinus.png | Bin 0 -> 40459 bytes figures/regression_gaussian_v1.png | Bin 0 -> 29197 bytes figures/regression_sinus.png | Bin 0 -> 33008 bytes gaussian_likelihood.png | Bin 117727 -> 0 bytes gaussian_sinus.png | Bin 44388 -> 0 bytes quantiles_sinus.png | Bin 40862 -> 0 bytes regression_sinus.png | Bin 38424 -> 0 bytes src/find_split_gpu.jl | 18 ++-- src/fit_gpu.jl | 16 ++-- src/loss_gpu.jl | 15 +-- src/predict_gpu.jl | 13 ++- test/GPU_v1.jl | 146 ----------------------------- test/gpu_base.jl | 99 +++++++------------ 22 files changed, 119 insertions(+), 266 deletions(-) rename {test => experiments}/GPU_loss.jl (100%) rename {test => experiments}/GPU_v2.jl (100%) rename {test => experiments}/hist_gpu.jl (100%) rename {test => experiments}/loss_gpu.jl (100%) create mode 100644 figures/gaussian_sinus.png create mode 100644 figures/quantiles_sinus.png create mode 100644 figures/regression_gaussian_v1.png create mode 100644 figures/regression_sinus.png delete mode 100644 gaussian_likelihood.png delete mode 100644 gaussian_sinus.png delete mode 100644 quantiles_sinus.png delete mode 100644 regression_sinus.png delete mode 100644 test/GPU_v1.jl diff --git a/README.md b/README.md index 9ac8644a..7bd633df 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,7 @@ mean(abs.(pred_test - selectrows(Y,test))) Minimal example to fit a noisy sinus wave. -![](regression_sinus.png) +![](figures/regression_sinus.png) ```julia using EvoTrees @@ -177,7 +177,7 @@ pred_eval_L1 = predict(model, X_eval) ## Quantile Regression -![](quantiles_sinus.png) +![](figures/quantiles_sinus.png) ```julia # q50 @@ -213,7 +213,7 @@ pred_train_q80 = predict(model, X_train) ## Gaussian Max Likelihood -![](gaussian_sinus.png) +![](figures/gaussian_sinus.png) ```julia params1 = EvoTreeGaussian( diff --git a/test/GPU_loss.jl b/experiments/GPU_loss.jl similarity index 100% rename from test/GPU_loss.jl rename to experiments/GPU_loss.jl diff --git a/test/GPU_v2.jl b/experiments/GPU_v2.jl similarity index 100% rename from test/GPU_v2.jl rename to experiments/GPU_v2.jl diff --git a/experiments/gaussian.jl b/experiments/gaussian.jl index f05e55bb..0b45b134 100644 --- a/experiments/gaussian.jl +++ b/experiments/gaussian.jl @@ -5,7 +5,7 @@ using Distributions using Revise using EvoTrees -features = rand(Int(1.25e4), 5) +features = rand(Int(1.25e4), 1) # prepare a dataset # features = rand(100, 10) X = features @@ -29,10 +29,10 @@ Y_train, Y_eval = Y[𝑖_train], Y[𝑖_eval] # train model params1 = EvoTreeGaussian( loss=:gaussian, metric=:gaussian, - nrounds=40, - λ = 0.0, γ=0.0, η=0.05, - max_depth = 5, min_weight = 50.0, - rowsample=0.5, colsample=1.0, nbins=200) + nrounds=200, + λ = 1.0, γ=1.0, η=0.5, + max_depth = 4, min_weight = 100.0, + rowsample=1.0, colsample=1.0, nbins=64) @time model = fit_evotree(params1, X_train, Y_train, X_eval=X_eval, Y_eval=Y_eval, print_every_n = 10); # @time model = fit_evotree(params1, X_train, Y_train, print_every_n = 10); @@ -50,9 +50,9 @@ x_perm = sortperm(X_train[:,1]) plot(X_train[:, 1], Y_train, ms = 1, mcolor = "gray", mscolor = "lightgray", background_color = RGB(1, 1, 1), seriestype=:scatter, xaxis = ("feature"), yaxis = ("target"), legend = true, label = "") plot!(X_train[:,1][x_perm], pred_train[x_perm, 1], color = "navy", linewidth = 1.5, label = "mu") plot!(X_train[:,1][x_perm], pred_train[x_perm, 2], color = "blue", linewidth = 1.5, label = "sigma") -plot!(X_train[:,1][x_perm], pred_q10[x_perm, 1], color = "red", linewidth = 1.5, label = "q10") +plot!(X_train[:,1][x_perm], pred_q10[x_perm, 1], color = "darkred", linewidth = 1.5, label = "q10") plot!(X_train[:,1][x_perm], pred_q90[x_perm, 1], color = "green", linewidth = 1.5, label = "q90") -savefig("regression_gaussian_v1.png") +savefig("figures/regression_gaussian_v1.png") # compare with zygote diff --git a/test/hist_gpu.jl b/experiments/hist_gpu.jl similarity index 100% rename from test/hist_gpu.jl rename to experiments/hist_gpu.jl diff --git a/test/loss_gpu.jl b/experiments/loss_gpu.jl similarity index 100% rename from test/loss_gpu.jl rename to experiments/loss_gpu.jl diff --git a/experiments/random.jl b/experiments/random.jl index 96313997..f8665401 100644 --- a/experiments/random.jl +++ b/experiments/random.jl @@ -20,13 +20,16 @@ train_size = 0.8 X_train, X_eval = X[𝑖_train, :], X[𝑖_eval, :] Y_train, Y_eval = Y[𝑖_train], Y[𝑖_eval] -# train model + +############################# +# CPU - linear +############################# params1 = EvoTreeRegressor(T=Float32, loss=:linear, metric=:none, - nrounds=100, + nrounds=200, λ = 1.0, γ=0.1, η=0.1, max_depth = 6, min_weight = 1.0, - rowsample=0.5, colsample=0.5, nbins=32) + rowsample=0.5, colsample=0.5, nbins=64) # for 100k 10 rounds: 410.477 ms (44032 allocations: 182.68 MiB) # for 100k 100 rounds: 2.177 s (404031 allocations: 626.45 MiB) @@ -37,6 +40,13 @@ params1 = EvoTreeRegressor(T=Float32, @time pred_train = predict(model, X_train) @time gain = importance(model, 1:100) +params1 = EvoTreeGaussian(T=Float32, + loss=:gaussian, metric=:none, + nrounds=100, + λ = 1.0, γ=0.1, η=0.1, + max_depth = 6, min_weight = 1.0, + rowsample=0.5, colsample=0.5, nbins=64) +@time model = fit_evotree(params1, X_train, Y_train); ################################ # GPU @@ -44,7 +54,7 @@ params1 = EvoTreeRegressor(T=Float32, # train model params1 = EvoTreeRegressor( loss=:linear, metric=:none, - nrounds=100, + nrounds=200, λ = 1.0, γ=0.1, η=0.1, max_depth = 6, min_weight = 1.0, rowsample=0.5, colsample=0.5, nbins=32) @@ -57,6 +67,17 @@ params1 = EvoTreeRegressor( @time pred_train = EvoTrees.predict_gpu(model, X_train) mean(pred_train) +################################ +# GPU - Gaussian +################################ +params1 = EvoTreeGaussian(T=Float32, + loss=:gaussian, metric=:none, + nrounds=100, + λ = 1.0, γ=0.1, η=0.1, + max_depth = 6, min_weight = 1.0, + rowsample=0.5, colsample=0.5, nbins=32) + +@time model = EvoTrees.fit_evotree_gpu(params1, X_train, Y_train); # xgboost benchmark using XGBoost diff --git a/experiments/readme_plots.jl b/experiments/readme_plots.jl index ba6e09a9..bd95d8c6 100644 --- a/experiments/readme_plots.jl +++ b/experiments/readme_plots.jl @@ -2,6 +2,7 @@ using BenchmarkTools using Statistics using StatsBase: sample, quantile using Distributions +using Random using Plots using Revise using EvoTrees @@ -9,6 +10,7 @@ using EvoTrees: sigmoid, logit # using ProfileView # prepare a dataset +Random.seed!(123) features = rand(10_000) .* 5 X = reshape(features, (size(features)[1], 1)) Y = sin.(features) .* 0.5 .+ 0.5 @@ -28,7 +30,7 @@ Y_train, Y_eval = Y[𝑖_train], Y[𝑖_eval] # linear params1 = EvoTreeRegressor( loss=:linear, metric=:mse, - nrounds=100, nbins = 64, + nrounds=200, nbins = 64, λ = 0.5, γ=0.1, η=0.1, max_depth = 6, min_weight = 1.0, rowsample=0.5, colsample=1.0) @@ -50,7 +52,7 @@ sqrt(mean((pred_train_linear .- Y_train) .^ 2)) # logistic / cross-entropy params1 = EvoTreeRegressor( loss=:logistic, metric = :logloss, - nrounds=100, nbins = 64, + nrounds=200, nbins = 64, λ = 0.5, γ=0.1, η=0.1, max_depth = 6, min_weight = 1.0, rowsample=0.5, colsample=1.0) @@ -89,11 +91,11 @@ sqrt(mean((pred_train_L1 .- Y_train) .^ 2)) x_perm = sortperm(X_train[:,1]) plot(X_train, Y_train, msize = 1, mcolor = "gray", mswidth=0, background_color = RGB(1, 1, 1), seriestype=:scatter, xaxis = ("feature"), yaxis = ("target"), legend = true, label = "") -plot!(X_train[:,1][x_perm], pred_train_linear[x_perm], color = "navy", linewidth = 1, label = "Linear") -plot!(X_train[:,1][x_perm], pred_train_logistic[x_perm], color = "darkred", linewidth = 1, label = "Logistic") -plot!(X_train[:,1][x_perm], pred_train_poisson[x_perm], color = "green", linewidth = 1, label = "Poisson") -plot!(X_train[:,1][x_perm], pred_train_L1[x_perm], color = "pink", linewidth = 1, label = "L1") -savefig("regression_sinus.png") +plot!(X_train[:,1][x_perm], pred_train_linear[x_perm], color = "navy", linewidth = 1.5, label = "Linear") +plot!(X_train[:,1][x_perm], pred_train_logistic[x_perm], color = "darkred", linewidth = 1.5, label = "Logistic") +plot!(X_train[:,1][x_perm], pred_train_poisson[x_perm], color = "green", linewidth = 1.5, label = "Poisson") +plot!(X_train[:,1][x_perm], pred_train_L1[x_perm], color = "pink", linewidth = 1.5, label = "L1") +savefig("figures/regression_sinus.png") ############################### ## Quantiles @@ -140,18 +142,17 @@ plot(X_train, Y_train, ms = 1, mcolor = "gray", mswidth=0, background_color = RG plot!(X_train[:,1][x_perm], pred_train_q50[x_perm], color = "navy", linewidth = 1.5, label = "Median") plot!(X_train[:,1][x_perm], pred_train_q20[x_perm], color = "darkred", linewidth = 1.5, label = "Q20") plot!(X_train[:,1][x_perm], pred_train_q80[x_perm], color = "green", linewidth = 1.5, label = "Q80") -savefig("quantiles_sinus.png") - +savefig("figures/quantiles_sinus.png") ############################### ## gaussian ############################### -params1 = EvoTreeGaussian( +params1 = EvoTreeGaussian(T=Float32, loss=:gaussian, metric=:gaussian, nrounds=200, nbins=64, - λ = 0.1, γ=0.1, η=0.1, - max_depth = 5, min_weight = 1.0, + λ = 0.0, γ=0.0, η=0.1, + max_depth = 6, min_weight = 1.0, rowsample=0.5, colsample=1.0, rng=123) @time model = fit_evotree(params1, X_train, Y_train, X_eval=X_eval, Y_eval=Y_eval, print_every_n = 10); @@ -169,7 +170,7 @@ mean(Y_train .< pred_q20) x_perm = sortperm(X_train[:,1]) plot(X_train[:, 1], Y_train, ms = 1, mcolor = "gray", mswidth=0, background_color = RGB(1, 1, 1), seriestype=:scatter, xaxis = ("feature"), yaxis = ("target"), legend = true, label = "") plot!(X_train[:,1][x_perm], pred_train[x_perm, 1], color = "navy", linewidth = 1.5, label = "mu") -plot!(X_train[:,1][x_perm], pred_train[x_perm, 2], color = "red", linewidth = 1.5, label = "sigma") +plot!(X_train[:,1][x_perm], pred_train[x_perm, 2], color = "darkred", linewidth = 1.5, label = "sigma") plot!(X_train[:,1][x_perm], pred_q20[x_perm, 1], color = "green", linewidth = 1.5, label = "q20") plot!(X_train[:,1][x_perm], pred_q80[x_perm, 1], color = "green", linewidth = 1.5, label = "q80") -savefig("gaussian_sinus.png") +savefig("figures/gaussian_sinus.png") diff --git a/figures/gaussian_sinus.png b/figures/gaussian_sinus.png new file mode 100644 index 0000000000000000000000000000000000000000..33cfb4ced4349767587f3a32338154a88e970867 GIT binary patch literal 44517 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 literal 0 HcmV?d00001 diff --git a/figures/quantiles_sinus.png b/figures/quantiles_sinus.png new file mode 100644 index 0000000000000000000000000000000000000000..8c57d0c156f167fc6ea00c66e4e9e66060893a99 GIT binary patch literal 40459 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