You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

main.py 4.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import numpy as np
  2. import torch
  3. import get_data
  4. import os
  5. import random
  6. from utils import generate_uploader, generate_user, ImageDataLoader, train
  7. from learnware.market import EasyMarket, BaseUserInfo
  8. from learnware.market import database_ops
  9. from learnware.learnware import Learnware
  10. import learnware.specification as specification
  11. from shutil import copyfile, rmtree
  12. import zipfile
  13. origin_data_root = "./data/origin_data"
  14. processed_data_root = "./data/processed_data"
  15. tmp_dir = "./data/tmp"
  16. learnware_pool_dir = "./data/learnware_pool"
  17. dataset = "cifar10"
  18. n_uploaders = 50
  19. n_users = 10
  20. n_classes = 10
  21. data_root = os.path.join(origin_data_root, dataset)
  22. data_save_root = os.path.join(processed_data_root, dataset)
  23. user_save_root = os.path.join(data_save_root, "user")
  24. uploader_save_root = os.path.join(data_save_root, "uploader")
  25. model_save_root = os.path.join(data_save_root, "uploader_model")
  26. os.makedirs(data_root, exist_ok=True)
  27. os.makedirs(user_save_root, exist_ok=True)
  28. os.makedirs(uploader_save_root, exist_ok=True)
  29. os.makedirs(model_save_root, exist_ok=True)
  30. semantic_specs = [
  31. {
  32. "Data": {"Values": ["Tabular"], "Type": "Class"},
  33. "Task": {
  34. "Values": ["Classification"],
  35. "Type": "Class",
  36. },
  37. "Device": {"Values": ["GPU"], "Type": "Tag"},
  38. "Scenario": {"Values": ["Nature"], "Type": "Tag"},
  39. "Description": {"Values": "", "Type": "Description"},
  40. "Name": {"Values": "learnware_1", "Type": "Name"},
  41. },
  42. {
  43. "Data": {"Values": ["Tabular"], "Type": "Class"},
  44. "Task": {
  45. "Values": ["Classification"],
  46. "Type": "Class",
  47. },
  48. "Device": {"Values": ["GPU"], "Type": "Tag"},
  49. "Scenario": {"Values": ["Business", "Nature"], "Type": "Tag"},
  50. "Description": {"Values": "", "Type": "Description"},
  51. "Name": {"Values": "learnware_2", "Type": "Name"},
  52. },
  53. {
  54. "Data": {"Values": ["Tabular"], "Type": "Class"},
  55. "Task": {
  56. "Values": ["Classification"],
  57. "Type": "Class",
  58. },
  59. "Device": {"Values": ["GPU"], "Type": "Tag"},
  60. "Scenario": {"Values": ["Business"], "Type": "Tag"},
  61. "Description": {"Values": "", "Type": "Description"},
  62. "Name": {"Values": "learnware_3", "Type": "Name"},
  63. },
  64. ]
  65. user_senmantic = {
  66. "Data": {"Values": ["Tabular"], "Type": "Class"},
  67. "Task": {
  68. "Values": ["Classification"],
  69. "Type": "Class",
  70. },
  71. "Device": {"Values": ["GPU"], "Type": "Tag"},
  72. "Scenario": {"Values": ["Business"], "Type": "Tag"},
  73. "Description": {"Values": "", "Type": "Description"},
  74. "Name": {"Values": "", "Type": "Name"},
  75. }
  76. def prepare_data():
  77. if dataset == "cifar10":
  78. X_train, y_train, X_test, y_test = get_data.get_cifar10(data_root)
  79. elif dataset == "mnist":
  80. X_train, y_train, X_test, y_test = get_data.get_mnist(data_root)
  81. else:
  82. return
  83. generate_uploader(X_train, y_train, n_uploaders=n_uploaders, data_save_root=uploader_save_root)
  84. generate_user(X_test, y_test, n_users=n_users, data_save_root=user_save_root)
  85. def prepare_model():
  86. dataloader = ImageDataLoader(data_save_root, train=True)
  87. for i in range(n_uploaders):
  88. print("Train on uploader: %d" % (i))
  89. X, y = dataloader.get_idx_data(i)
  90. model = train(X, y, out_classes=n_classes)
  91. model_save_path = os.path.join(model_save_root, "uploader_%d.pth" % (i))
  92. torch.save(model.state_dict(), model_save_path)
  93. print("Model saved to '%s'" % (model_save_path))
  94. def prepare_learnware(data_path, model_path, init_file_path, yaml_path):
  95. X = np.load(data_path)
  96. user_spec = specification.utils.generate_rkme_spec(X=X, gamma=0.1, cuda_idx=0)
  97. print(user_spec.shape)
  98. def prepare_market():
  99. image_market = EasyMarket(rebuild=True)
  100. os.makedirs(learnware_pool_dir)
  101. for i in range(n_uploaders):
  102. data_path = os.path.join(uploader_save_root, "uploader_%d_X.npy" % (i))
  103. model_path = os.path.join(model_save_root, "uploader_%d.pth" % (i))
  104. init_file_path = "./example_init.py"
  105. yaml_file_path = "./example_yaml.yaml"
  106. prepare_learnware(data_path, model_path, init_file_path, yaml_file_path)
  107. if __name__ == "__main__":
  108. # prepare_data()
  109. # prepare_model()
  110. prepare_market()

基于学件范式,全流程地支持学件上传、检测、组织、查搜、部署和复用等功能。同时,该仓库作为北冥坞系统的引擎,支撑北冥坞系统的核心功能。