AgentConfig.cs 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using AIPlatform.Protocol.Entities;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Net;
  7. using System.Net.NetworkInformation;
  8. using System.Net.Sockets;
  9. using System.Xml;
  10. namespace aipagnt
  11. {
  12. class AgentConfig
  13. {
  14. /// <summary>
  15. /// Gets the working folder of this agent.
  16. /// </summary>
  17. public static readonly string WorkingFolder;
  18. /// <summary>
  19. /// Gets the hardware code of this agent.
  20. /// </summary>
  21. public static readonly string HardwareCode;
  22. /// <summary>
  23. /// Gets the ip address of this agent.
  24. /// </summary>
  25. public static readonly string IpAddress;
  26. public static readonly Dictionary<TrainScriptPackageFramework, string> PythonEnvs;
  27. static AgentConfig()
  28. {
  29. PythonEnvs = new Dictionary<TrainScriptPackageFramework, string>();
  30. InitializePythonExeFolder();
  31. WorkingFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "WorkingFolder");
  32. if (!Directory.Exists(WorkingFolder))
  33. {
  34. Directory.CreateDirectory(WorkingFolder);
  35. }
  36. var adapter = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault();
  37. if (adapter == null)
  38. {
  39. throw new InvalidOperationException("No network adapter");
  40. }
  41. HardwareCode = adapter.GetPhysicalAddress().ToString();
  42. var address = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(x => x.AddressFamily == AddressFamily.InterNetwork);
  43. IpAddress = address != null ? address.ToString() : string.Empty;
  44. }
  45. private static void InitializePythonExeFolder()
  46. {
  47. var configFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config.xml");
  48. if (File.Exists(configFilePath))
  49. {
  50. var xmlDoucment = new XmlDataDocument();
  51. xmlDoucment.Load(configFilePath);
  52. if (xmlDoucment.DocumentElement == null || xmlDoucment.ChildNodes.Count < 0)
  53. {
  54. return;
  55. }
  56. var pythonEnvsElement = xmlDoucment.ChildNodes.OfType<XmlElement>().FirstOrDefault(x => x.Name == "PythonEnvs");
  57. if (pythonEnvsElement == null)
  58. {
  59. return;
  60. }
  61. foreach (var childNode in pythonEnvsElement.ChildNodes.OfType<XmlElement>())
  62. {
  63. var env = childNode.GetAttribute("env");
  64. var name = childNode.GetAttribute("name");
  65. if (!string.IsNullOrEmpty(name))
  66. {
  67. switch (env.ToLower())
  68. {
  69. case "tensorflow":
  70. PythonEnvs.Add(TrainScriptPackageFramework.Tensorflow, name);
  71. break;
  72. case "vinno_torch":
  73. PythonEnvs.Add(TrainScriptPackageFramework.vinno_torch, name);
  74. break;
  75. case "cntk":
  76. PythonEnvs.Add(TrainScriptPackageFramework.CNTK, name);
  77. break;
  78. case "vinno_torch_plus":
  79. PythonEnvs.Add(TrainScriptPackageFramework.vinno_torch_plus, name);
  80. break;
  81. case "vinno_torch_premium":
  82. PythonEnvs.Add(TrainScriptPackageFramework.vinno_torch_premium, name);
  83. break;
  84. }
  85. }
  86. }
  87. }
  88. }
  89. }
  90. }