From 4f2d1c4700bb4c51ffa6e8ad6cec38d41f50e896 Mon Sep 17 00:00:00 2001 From: "Randall C. O'Reilly" Date: Wed, 19 Jun 2024 00:35:08 -0700 Subject: [PATCH] fix spike bins for arbitrary ThetaCycles, testing with objrec for NCycles=300 --- axon/layerparams.go | 5 ++-- axon/shaders/gpu_cycle.spv | Bin 106072 -> 106112 bytes examples/objrec/bench_results.md | 45 +++++++++++++++++++++++++++++++ examples/objrec/config.go | 3 +++ examples/objrec/objrec.go | 8 +++--- examples/objrec/params.go | 10 +++++++ examples/ra25x/config.go | 3 +++ examples/ra25x/ra25x.go | 8 +++--- simscripts/20-Fetch.cosh | 2 +- 9 files changed, 75 insertions(+), 9 deletions(-) diff --git a/axon/layerparams.go b/axon/layerparams.go index b388d0bfc..ba6414c80 100644 --- a/axon/layerparams.go +++ b/axon/layerparams.go @@ -715,7 +715,8 @@ func (ly *LayerParams) SpikeFromG(ctx *Context, ni, di uint32, lpl *Pool) { SetNrnV(ctx, ni, di, SpkMax, spkmax) } } - bin := ctx.Cycle / 50 + spksper := ctx.ThetaCycles / 4 + bin := ctx.Cycle / spksper spk := NrnV(ctx, ni, di, Spike) switch bin { case 0: @@ -724,7 +725,7 @@ func (ly *LayerParams) SpikeFromG(ctx *Context, ni, di uint32, lpl *Pool) { AddNrnV(ctx, ni, di, SpkBin1, spk) case 2: AddNrnV(ctx, ni, di, SpkBin2, spk) - case 3: + default: AddNrnV(ctx, ni, di, SpkBin3, spk) } } diff --git a/axon/shaders/gpu_cycle.spv b/axon/shaders/gpu_cycle.spv index 0340e5c8b8ae08b2727b56af38951fd8afa608b7..05705b12d78ff15f7229b93c911ff4acf5f96a0d 100644 GIT binary patch literal 106112 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%0A#1BH{^kc8Lx0I{0kHmR{TD>m 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 diff --git a/examples/objrec/bench_results.md b/examples/objrec/bench_results.md index f928b9216..e2decf478 100644 --- a/examples/objrec/bench_results.md +++ b/examples/objrec/bench_results.md @@ -1,3 +1,48 @@ +# v2.0.0-dev0.2.0 + +Linear approximation to synaptic calcium integration: + +## MacBook Pro M3 Max + +Major improvements for GPU at all NData, major for NData 32 (5x), 16 (4x): +``` +GPU: +* NData 1: 59 +* NData 2: 39 +* NData 4: 27 +* NData 8: 20 +* NData 16: 15 +* NData 32: 12 +``` + +Not much diff for ndata now on CPU beyond 4, NThreads = 16 +``` +CPU: +* NData 1: 90 +* NData 2: 76 +* NData 4: 69 +* NData 8: 63 +* NData 16: 62 +* NData 32: 62 +``` + +## HPC2 ccnl-0 AMD EPYC 7502 32-Core Processor + NVIDIA A100 GPU + +``` +GPU: +* NData 4: 105 +* NData 8: 83 +* NData 16: 76 +* NData 32: 77 +``` + +``` +CPU: +* NData 16: 180 (ccnl-0) +* NData 16: 280 (Node 3) +* NData 16: 385 (Node 3, v0.0.8 -- previous SynCa) +``` + # v1.8.0 results are PerTrlMSec diff --git a/examples/objrec/config.go b/examples/objrec/config.go index 21db88916..df92bf031 100644 --- a/examples/objrec/config.go +++ b/examples/objrec/config.go @@ -82,6 +82,9 @@ type RunConfig struct { //types:add // total number of trials per epoch. Should be an even multiple of NData. NTrials int `default:"128"` + // total number of cycles per trial. + NCycles int `default:"300"` + // how frequently (in epochs) to compute PCA on hidden representations to measure variance? PCAInterval int `default:"5"` diff --git a/examples/objrec/objrec.go b/examples/objrec/objrec.go index 7993790b7..df6a649fd 100644 --- a/examples/objrec/objrec.go +++ b/examples/objrec/objrec.go @@ -107,6 +107,7 @@ func (ss *Sim) New() { ss.RandSeeds.Init(100) // max 100 runs ss.InitRandSeed(0) ss.Context.Defaults() + ss.Context.ThetaCycles = int32(ss.Config.Run.NCycles) // ss.Context.SlowInterval = 100 } @@ -265,20 +266,21 @@ func (ss *Sim) InitRandSeed(run int) { func (ss *Sim) ConfigLoops() { man := looper.NewManager() + ncyc := ss.Config.Run.NCycles trls := int(math32.IntMultipleGE(float32(ss.Config.Run.NTrials), float32(ss.Config.Run.NData))) man.AddStack(etime.Train). AddTime(etime.Run, ss.Config.Run.NRuns). AddTime(etime.Epoch, ss.Config.Run.NEpochs). AddTimeIncr(etime.Trial, trls, ss.Config.Run.NData). - AddTime(etime.Cycle, 200) + AddTime(etime.Cycle, ncyc) man.AddStack(etime.Test). AddTime(etime.Epoch, 1). AddTimeIncr(etime.Trial, trls, ss.Config.Run.NData). - AddTime(etime.Cycle, 200) + AddTime(etime.Cycle, ncyc) - axon.LooperStdPhases(man, &ss.Context, ss.Net, 150, 199) // plus phase timing + axon.LooperStdPhases(man, &ss.Context, ss.Net, ncyc-50, ncyc-1) // plus phase timing axon.LooperSimCycleAndLearn(man, ss.Net, &ss.Context, &ss.ViewUpdate) // std algo code for mode := range man.Stacks { diff --git a/examples/objrec/params.go b/examples/objrec/params.go index 29465c105..efb990253 100644 --- a/examples/objrec/params.go +++ b/examples/objrec/params.go @@ -24,6 +24,16 @@ var ParamSets = netparams.Sets{ "Layer.Learn.LrnNMDA.Tau": "100", // 100 def "Layer.Learn.LrnNMDA.Gbar": "0.006", "Layer.Learn.RLRate.SigmoidLinear": "true", // true > false later; more stable + "Layer.Learn.CaLearn.Norm": "80", // 80 works + "Layer.Learn.CaLearn.SpkVGCC": "true", // sig better.. + "Layer.Learn.CaLearn.SpkVgccCa": "35", // 70 / 5 or 35 / 10 both work + "Layer.Learn.CaLearn.VgccTau": "10", // 10 > 5 ? + "Layer.Learn.CaLearn.Dt.MTau": "2", + "Layer.Learn.CaLearn.Dt.PTau": "50", + "Layer.Learn.CaLearn.Dt.DTau": "50", + "Layer.Learn.CaSpk.Dt.MTau": "5", + "Layer.Learn.CaSpk.Dt.PTau": "50", + "Layer.Learn.CaSpk.Dt.DTau": "50", }}, {Sel: "#V1", Desc: "pool inhib (not used), initial activity", Params: params.Params{ diff --git a/examples/ra25x/config.go b/examples/ra25x/config.go index 4c7c3b4e9..90862959d 100644 --- a/examples/ra25x/config.go +++ b/examples/ra25x/config.go @@ -64,6 +64,9 @@ type RunConfig struct { // total number of trials per epoch. Should be an even multiple of NData. NTrials int `default:"32"` + // total number of cycles per trial. + NCycles int `default:"300"` + // how often to run through all the test patterns, in terms of training epochs -- can use 0 or -1 for no testing TestInterval int `default:"5"` diff --git a/examples/ra25x/ra25x.go b/examples/ra25x/ra25x.go index eb427117d..b62897833 100644 --- a/examples/ra25x/ra25x.go +++ b/examples/ra25x/ra25x.go @@ -105,6 +105,7 @@ func (ss *Sim) New() { ss.RandSeeds.Init(100) // max 100 runs ss.InitRandSeed(0) ss.Context.Defaults() + ss.Context.ThetaCycles = int32(ss.Config.Run.NCycles) } //////////////////////////////////////////////////////////////////////////////////////////// @@ -235,20 +236,21 @@ func (ss *Sim) InitRandSeed(run int) { func (ss *Sim) ConfigLoops() { man := looper.NewManager() + ncyc := ss.Config.Run.NCycles trls := int(math32.IntMultipleGE(float32(ss.Config.Run.NTrials), float32(ss.Config.Run.NData))) man.AddStack(etime.Train). AddTime(etime.Run, ss.Config.Run.NRuns). AddTime(etime.Epoch, ss.Config.Run.NEpochs). AddTimeIncr(etime.Trial, trls, ss.Config.Run.NData). - AddTime(etime.Cycle, 200) + AddTime(etime.Cycle, ncyc) man.AddStack(etime.Test). AddTime(etime.Epoch, 1). AddTimeIncr(etime.Trial, trls, ss.Config.Run.NData). - AddTime(etime.Cycle, 200) + AddTime(etime.Cycle, ncyc) - axon.LooperStdPhases(man, &ss.Context, ss.Net, 150, 199) // plus phase timing + axon.LooperStdPhases(man, &ss.Context, ss.Net, ncyc-50, ncyc-1) // plus phase timing axon.LooperSimCycleAndLearn(man, ss.Net, &ss.Context, &ss.ViewUpdate) // std algo code for m, _ := range man.Stacks { diff --git a/simscripts/20-Fetch.cosh b/simscripts/20-Fetch.cosh index eaf233b6f..46da752e2 100644 --- a/simscripts/20-Fetch.cosh +++ b/simscripts/20-Fetch.cosh @@ -27,7 +27,7 @@ func FetchJob(jid string, force bool) { // fmt.Println(ff) rfn := "@1:" + ff scp {rfn} {ff} - if sstat == "Finalized" && strings.HasSuffix(ff, ".tsv") { + if (sstat == "Finalized" || sstat == "Fetched") && strings.HasSuffix(ff, ".tsv") { if strings.Contains(ff, "_epc.tsv") { databrowser.CleanCatTSV(ff, []string{"Run", "Epoch"}) idx := strings.Index(ff, "_epc.tsv")