/// <summary> /// Dumps GPU information and runs benchmarks. /// </summary> /// <returns>Sum of NPS across all GPUs</returns> public static (int CountGPU, int SumNPS) DumpGPUBenchmark() { Console.WriteLine(); Console.WriteLine("-----------------------------------------------------------------------------------"); Console.WriteLine($"GPU BENCHMARK (benchmark net: {CeresUserSettingsManager.Settings.DefaultNetworkSpecString})"); Console.WriteLine(); Console.WriteLine(NVML.InfoDescriptionHeaderLine1 + " NPS 1 NPS Batch"); Console.WriteLine(NVML.InfoDescriptionHeaderLine2 + " ----- ---------"); int sumNPS = 0; int countGPU = 0; foreach (NVMLGPUInfo info in NVML.GetGPUsInfo()) { NNEvaluatorDef evaluatorDef = NNEvaluatorDef.FromSpecification(CeresUserSettingsManager.Settings.DefaultNetworkSpecString, "GPU:" + info.ID.ToString()); NNEvaluator evaluator = NNEvaluatorFactory.BuildEvaluator(evaluatorDef); (float npsSingletons, float npsBigBatch, _) = NNEvaluatorBenchmark.EstNPS(evaluator, false, 512, true, 3); Console.WriteLine(NVML.GetInfoDescriptionLine(info) + $" {npsSingletons,6:N0} { npsBigBatch,10:N0}"); countGPU++; sumNPS += (int)npsBigBatch; evaluator.Dispose(); } return(countGPU, sumNPS); }
public void Dispose() { evaluator1?.Dispose(); evaluator2?.Dispose(); evaluatorSecondary?.Dispose(); evaluator1 = null; evaluator2 = null; evaluatorSecondary = null; }
/// <summary> /// Constructor for a NN evaluator (either local or remote) with specified parameters. /// </summary> /// <param name="paramsNN"></param> /// <param name="saveToCache"></param> /// <param name="instanceID"></param> /// <param name="lowPriority"></param> public LeafEvaluatorNN(NNEvaluatorDef evaluatorDef, NNEvaluator evaluator, bool saveToCache, bool lowPriority, PositionEvalCache cache, Func <MCTSIterator, int> batchEvaluatorIndexDynamicSelector) { rawPosArray = posArrayPool.Rent(NNEvaluatorDef.MAX_BATCH_SIZE); EvaluatorDef = evaluatorDef; SaveToCache = saveToCache; LowPriority = lowPriority; Cache = cache; this.BatchEvaluatorIndexDynamicSelector = batchEvaluatorIndexDynamicSelector; Batch = new EncodedPositionBatchFlat(EncodedPositionType.PositionOnly, NNEvaluatorDef.MAX_BATCH_SIZE); if (evaluatorDef.Location == NNEvaluatorDef.LocationType.Local) { localEvaluator = evaluator;// isEvaluator1 ? Params.Evaluator1 : Params.Evaluator2; } else { throw new NotImplementedException(); } // TODO: auto-estimate performance #if SOMEDAY for (int i = 0; i < 10; i++) { // using (new TimingBlock("benchmark")) { float[] splits = WFEvalNetBenchmark.GetBigBatchNPSFractions(((WFEvalNetCompound)localEvaluator).Evaluators); Console.WriteLine(splits[0] + " " + splits[1] + " " + splits[2] + " " + splits[3]); (float estNPSSingletons, float estNPSBigBatch) = WFEvalNetBenchmark.EstNPS(localEvaluator); Console.WriteLine(estNPSSingletons + " " + estNPSBigBatch); } } #endif }
/// <summary> /// If this evaluator produces the same output as another specified evaluator. /// </summary> /// <param name="evaluator"></param> /// <returns></returns> public override bool IsEquivalentTo(NNEvaluator evaluator) { return(evaluator is NNEvaluatorEngineONNX && ((NNEvaluatorEngineONNX)evaluator).EngineNetworkID == EngineNetworkID); }