• [活动体验] 基于MindSpore Serving部署推理服务
    概述MindSpore Serving是一个轻量级、高性能的服务模块,旨在帮助MindSpore开发者在生产环境中高效部署在线推理服务。当用户使用MindSpore完成模型训练后,导出MindSpore模型,即可使用MindSpore Serving创建该模型的推理服务。本文以一个简单的Add网络为例,演示MindSpore Serving如何使用。环境准备运行示例前,需确保已经正确安装了MindSpore Serving,并配置了环境变量导出模型.在export_model目录下,使用add_model.py ,构造一个只有Add算子的网络,并导出MindSpore推理部署模型。import osfrom shutil import copyfileimport numpy as npimport mindspore.context as contextimport mindspore.nn as nnimport mindspore.ops as opsimport mindspore as mscontext.set_context(mode=context.GRAPH_MODE, device_target="Ascend")class Net(nn.Cell):"""Define Net of add"""def __init__(self):super(Net, self).__init__()self.add = ops.Add()def construct(self, x_, y_):"""construct add net"""return self.add(x_, y_)def export_net():"""Export add net of 2x2 + 2x2, and copy output model `tensor_add.mindir` to directory ../add/1"""x = np.ones([2, 2]).astype(np.float32)y = np.ones([2, 2]).astype(np.float32)add = Net()ms.export(add, ms.Tensor(x), ms.Tensor(y), file_name='tensor_add', file_format='MINDIR')dst_dir = '../add/1'try:os.mkdir(dst_dir)except OSError:passdst_file = os.path.join(dst_dir, 'tensor_add.mindir')copyfile('tensor_add.mindir', dst_file)print("copy tensor_add.mindir to " + dst_dir + " success")if __name__ == "__main__":export_net()使用MindSpore定义神经网络需要继承mindspore.nn.Cell。Cell是所有神经网络的基类。神经网络的各层需要预先在__init__方法中定义,然后通过定义construct方法来完成神经网络的前向构造。使用mindspore模块的export即可导出模型文件。执行add_model.py脚本,生成tensor_add.mindir文件,该模型的输入为两个shape为[2,2]的二维Tensor,输出结果是两个输入Tensor之和。部署Serving推理服务配置服务启动Serving服务,以Add用例为例,需要如下文件列表:serving_server.py为启动服务脚本文件。add为模型文件夹,文件夹名即为模型名。tensor_add.mindir为上一步网络生成的模型文件,放置在文件夹1下,1为版本号,不同的版本放置在不同的文件夹下,版本号需以纯数字串命名,默认配置下启动最大数值的版本号的模型文件。其定义了模型的处理函数,包括add_common和add_cast两个方法,add_common定义了输入为两个普通float32类型的加法操作,add_cast定义输入类型为其他类型,经过输入类型转换float32后的加法操作。模型配置文件内容如下:import numpy as npfrom mindspore_serving.server import registerdef add_trans_datatype(x1, x2):"""define preprocess, this example has two inputs and two outputs"""return x1.astype(np.float32), x2.astype(np.float32)# when with_batch_dim is set to False, only 2x2 add is supported# when with_batch_dim is set to True(default), Nx2 add is supported, while N is viewed as batch# float32 inputs/outputsmodel = register.declare_model(model_file="tensor_add.mindir", model_format="MindIR", with_batch_dim=False)# register add_common method in add@register.register_method(output_names=["y"])def add_common(x1, x2): # only support float32 inputs"""method add_common data flow definition, only call model"""y = register.add_stage(model, x1, x2, outputs_count=1)return y# register add_cast method in add@register.register_method(output_names=["y"])def add_cast(x1, x2):"""method add_cast data flow definition, only preprocessing and call model"""x1, x2 = register.add_stage(add_trans_datatype, x1, x2, outputs_count=2) # cast input to float32y = register.add_stage(model, x1, x2, outputs_count=1)return y启动服务执行serving_server.py ,完成服务启动:import osimport sysfrom mindspore_serving import serverdef start():servable_dir = os.path.dirname(os.path.realpath(sys.argv[0]))servable_config = server.ServableStartConfig(servable_directory=servable_dir, servable_name="add",device_ids=(0, 1))server.start_servables(servable_configs=servable_config)server.start_grpc_server(address="127.0.0.1:5500")server.start_restful_server(address="127.0.0.1:1500")if __name__ == "__main__":start()上述启动脚本将在设备0和1上共加载和运行两个add推理副本,来自客户端的推理请求将被切割分流到两个推理副本。当服务端打印日志Serving RESTful server start success, listening on 127.0.0.1:1500时,表示Serving RESTful服务启动成功,推理模型已成功加载。执行推理客户端提供两种方式访问推理服务,一种是通过gRPC方式 ,一种是通过RESTful方式 ,本文以gRPC方式为例。 使用serving_client.py ,启动Python客户端。代码如下:import numpy as npfrom mindspore_serving.client import Clientdef run_add_common():"""invoke servable add method add_common"""client = Client("127.0.0.1:5500", "add", "add_common")instances = []# instance 1x1 = np.asarray([[1, 1], [1, 1]]).astype(np.float32)x2 = np.asarray([[1, 1], [1, 1]]).astype(np.float32)instances.append({"x1": x1, "x2": x2})# instance 2x1 = np.asarray([[2, 2], [2, 2]]).astype(np.float32)x2 = np.asarray([[2, 2], [2, 2]]).astype(np.float32)instances.append({"x1": x1, "x2": x2})# instance 3x1 = np.asarray([[3, 3], [3, 3]]).astype(np.float32)x2 = np.asarray([[3, 3], [3, 3]]).astype(np.float32)instances.append({"x1": x1, "x2": x2})result = client.infer(instances)print(result)def run_add_cast():"""invoke servable add method add_cast"""client = Client("127.0.0.1:5500", "add", "add_cast")instances = []x1 = np.ones((2, 2), np.int32)x2 = np.ones((2, 2), np.int32)instances.append({"x1": x1, "x2": x2})result = client.infer(instances)print(result)if __name__ == '__main__':run_add_common()run_add_cast()代码如下:
  • [活动体验] 使用MindSpore Reinforcement实现深度Q学习
    摘要为了使用MindSpore Reinforcement实现强化学习算法,用户需要:1. 提供算法配置,将算法的实现与其部署细节分开;2. 基于Actor-Learner-Environment抽象实现算法;3. 创建一个执行已实现的算法的会话对象。本教程展示了使用MindSpore Reinforcement API实现深度Q学习(DQN)算法。注:为保证清晰性和可读性,仅显示与API相关的代码,不相关的代码已省略。指定DQN的Actor-Learner-Environment抽象DQN算法需要两个深度神经网络,一个策略网络用于近似动作值函数(Q函数),另一个目标网络用于稳定训练。策略网络指如何对环境采取行动的策略,DQN算法的目标是训练策略网络以获得最大的奖励。此外,DQN算法使用经验回放技术来维护先前的观察结果,进行off-policy学习。其中Actor使用不同的行为策略来对环境采取行动。MindSpore Reinforcement使用算法配置指定DQN算法所需的逻辑组件(Agent、Actor、Learner、Environment)和关联的超参数。根据提供的配置,它使用不同的策略执行算法,以便用户可以专注于算法设计。算法配置是一个Python字典,指定如何构造DQN算法的不同组件。每个组件的超参数在单独的Python字典中配置。DQN算法配置定义如下:代码如下:'actor': {'number': 1,'type': DQNActor,'params': None,'policies': ['init_policy', 'collect_policy', 'evaluate_policy'],'networks': ['policy_network', 'target_network'],'environment': True,'eval_environment': True,'replay_buffer': {'capacity': 100000, 'shape': [(4,), (1,), (1,), (4,)],'sample_size': 64, 'type': [ms.float32, ms.int32, ms.float32, ms.float32]},},'learner': {'number': 1,'type': DQNLearner,'params': learner_params,'networks': ['target_network', 'policy_network_train']},'policy_and_network': {'type': DQNPolicy,'params': policy_params},'environment': {'type': GymEnvironment,'params': env_params},'eval_environment': {'type': GymEnvironment,'params': eval_env_params}}以上配置定义了四个顶层项,每个配置对应一个算法组件:actor、learner、policy和environment。每个项对应一个类,以实现DQN算法的逻辑。顶层项具有描述组件的子项。number定义算法使用的组件的实例数。class表示必须定义的Python类的名称,用于实现组件。parameters为组件提供必要的超参数。policy定义组件使用的策略。networks列出了此组件使用的所有神经网络。environment说明组件是否与环境交互。在DQN示例中,只有Actor与环境交互。reply_buffer定义回放缓冲区的容量、形状、样本大小和数据类型。对于DQN算法,我们配置了一个Actor 'number': 1,三个行为策略'policies': ['init_policy', 'collect_policy', 'evaluation_policy'],两个神经网络'networks': ['policy_network', 'target_network'],环境'environment': True,和回放缓冲区'replay_buffer':{'capacity':100000,'shape':[...],'sample_size':64,'type':[..]}。回放缓冲区的容量设置为100,000,其样本大小为64。它存储shape为[(4,), (1,), (1,), (4,)]的张量数据。第二个维度的类型为int32,其他维度的类型为float32。这两种类型都由MindSpore提供:'type': [mindspore.float32, mindspore.int32, mindspore.float32, mindspore.float32]}。其他组件也以类似的方式定义。请注意,MindSpore Reinforcement使用单个policy类来定义算法使用的所有策略和神经网络。通过这种方式,它隐藏了策略和神经网络之间数据共享和通信的复杂性。MindSpore Reinforcement在session的上下文中执行算法。会话分配资源(在一台或多台群集计算机上)并执行编译后的计算图。用户传入算法配置以实例化Session类:dqn_session = Session(dqn_algorithm_config)调用Session对象上的run方法执行DQN算法:dqn_session.run(class_type=DQNTrainer, episode=650, parameters=trainer_parameters)run方法将DQNTrainer类作为输入。下面描述了用于DQN算法的训练循环。为使用MindSpore的计算图功能,将执行模式设置为GRAPH_MODE。from mindspore import contextcontext.set_context(mode=context.GRAPH_MODE)run方法将DQNTrainer类作为输入。下面描述了用于DQN算法的训练循环。为使用MindSpore的计算图功能,将执行模式设置为GRAPH_MODE。from mindspore import contextcontext.set_context(mode=context.GRAPH_MODE)定义DQNTrainer类DQN训练器类表示训练循环,该循环迭代地从回放缓冲区收集经验并训练目标模型。它必须继承自Trainer类,该类是MindSpore Reinforcement API的一部分。Trainer基类包含MSRL(MindSpore Reinforcement Learning)对象,该对象允许算法实现与MindSpore Reinforcement交互,以实现训练逻辑。MSRL类根据先前定义的算法配置实例化RL算法组件。它提供了函数处理程序,这些处理程序透明地绑定到用户定义的Actor、Learner或回放缓冲区对象的方法。因此,MSRL类让用户能够专注于算法逻辑,同时它透明地处理一个或多个worker上不同算法组件之间的对象创建、数据共享和通信。用户通过使用算法配置创建上文提到的Session对象来实例化MSRL对象。DQNTrainer必须重载训练方法。在本教程中,它的定义如下:代码如下:class DQNTrainer(Trainer):...def train(self, episode):self.init_training()for i in range(episode):reward, episode_steps = self.train_one_episode(self.update_period)reward = self.evaluation()train方法首先调用init_training初始化训练。然后,它为指定数量的episode(iteration)训练模型,每个episode调用用户定义的train_one_episode方法。最后,train方法通过调用evaluation方法来评估策略以获得奖励值。在训练循环的每次迭代中,调用train_one_episode方法来训练一个episode:代码如下:@ms_functiondef train_one_episode(self, update_period=5):"""Train one episode"""state, done = self.msrl.agent_reset_collect()total_reward = self.zerosteps = self.zerowhile not done:done, r, new_state, action, my_reward = self.msrl.agent_act(state)self.msrl.replay_buffer_insert([state, action, my_reward, new_state])state = new_stater = self.squeeze(r)self.msrl.agent_learn(self.msrl.replay_buffer_sample())total_reward += rsteps += 1if not self.mod(steps, update_period):self.msrl.agent_update()return total_reward, steps@ms_function注解表示此方法将被编译为MindSpore计算图用于加速。所有标量值都必须定义为张量类型,例如self.zero_value = Tensor(0, mindspore.float32)。train_one_episode方法首先调用msrl.agent_reset_collect函数(由MindSpore Reinforcement API提供)来重置环境。然后,它使用msrl.agent_act函数处理程序从环境中收集经验,并使用msrl.agent_learn函数训练目标模型。msrl.agent_learn的输入是msrl.sample_replay_buffer返回的采样结果。回放缓存ReplayBuffer由MindSpore Reinfocement提供。它定义了insert和sample方法,分别用于对经验数据进行存储和采样。定义DQNPolicy类定义DQNPolicy类,用于实现神经网络并定义策略。代码如下:class DQNPolicy():def __init__(self, params):self.policy_network = FullyConnectedNet(params['state_space_dim'],params['hidden_size'],params['action_space_dim'])self.target_network = FullyConnectedNet(params['state_space_dim'],params['hidden_size'],params['action_space_dim'])构造函数将先前定义的Python字典类型的超参数policy_parameters作为输入。在定义策略网络和目标网络之前,用户必须使用MindSpore算子定义神经网络的结构。例如,它们可能是FullyConnectedNetwork类的对象,该类定义如下:代码如下:class FullyConnectedNetwork(mindspore.nn.Cell):def __init__(self, input_size, hidden_size, output_size):super(FullyConnectedNet, self).__init__()self.linear1 = nn.Dense(input_size,hidden_size,weight_init="XavierUniform")self.linear2 = nn.Dense(hidden_size,output_size,weight_init="XavierUniform")self.relu = nn.ReLU()DQN算法使用损失函数来优化神经网络的权重。此时,用户必须定义一个用于计算损失函数的神经网络。此网络被指定为DQNPolicy的嵌套类。此外,还需要优化器来训练网络。优化器和损失函数定义如下:class DQNPolicy():def __init__(self, params):...loss_fn = mindspore.nn.MSELoss()optimizer = mindspore.nn.Adam(self.policy_net.trainable_params(),learning_rate=params['lr'])loss_Q_net = self.PolicyNetWithLossCell(self.policy_network, loss_fn)self.policy_network_train = mindspore.nn.TrainOneStepCell(loss_Q_net, otimizer)self.policy_network_train.set_train(mode=True)由于上述三种行为策略在一系列RL算法中非常常见,MindSpore Reinforcement将它们作为可重用的构建块提供。用户还可以自定义特定算法的行为策略。请注意,参数字典的方法名称和键必须与前面定义的算法配置一致。定义DQNActor类定义一个新的Actor组件用于实现DQNActor,该组件继承了MindSpore Reinforcement提供的Actor类。然后,必须重载trainer使用的方法:代码如下:class DQNActor(Actor):...def act_init(self, state):"""Fill the replay buffer"""action = self.init_policy()new_state, reward, done = self._environment.step(action)action = self.reshape(action, (1,))my_reward = self.select(done, self.penalty, self.reward)return done, reward, new_state, action, my_rewarddef act(self, state):"""Experience collection"""self.step += 1ts0 = self.expand_dims(state, 0)step_tensor = self.ones((1, 1), ms.float32) * self.stepaction = self.collect_policy(ts0, step_tensor)new_state, reward, done = self._environment.step(action)action = self.reshape(action, (1,))my_reward = self.select(done, self.penalty, self.reward)return done, reward, new_state, action, my_rewarddef evaluate(self, state):"""Evaluate the trained policy"""ts0 = self.expand_dims(state, 0)action = self.evaluate_policy(ts0)new_state, reward, done = self._eval_env.step(action)return done, reward, new_state这三种方法使用不同的策略作用于指定的环境,这些策略将状态映射到操作。这些方法将张量类型的值作为输入,并从环境返回轨迹。为了与环境交互,Actor使用Environment类中定义的step(action)方法。对于应用到指定环境的操作,此方法会做出反应并返回三元组。三元组包括应用上一个操作后的新状态、作为浮点类型获得的奖励以及用于终止episode和重置环境的布尔标志。回放缓冲区类ReplayBuffer定义了一个insert方法,DQNActor对象调用该方法将经验数据存储在回放缓冲区中。Environment类和ReplayBuffer类由MindSpore Reinforcement API提供。DQNActor类的构造函数定义了环境、回放缓冲区、策略和网络。它将字典类型的参数作为输入,这些参数在算法配置中定义。下面,我们只展示环境的初始化,其他属性以类似的方式分配:代码如下:class DQNActor(Actor):def __init__(self, params):self._environment = params['environment']...在这里,learn方法将轨迹(从回放缓冲区采样)作为输入来训练策略网络。构造函数通过从算法配置接收字典类型的配置,将网络、策略和折扣率分配给DQNLearner:class DQNLearner(Learner):def __init__(self, params=None):self.target_network = params['target_network']self.policy_network_train = params['policy_network_train']self.gamma = Tensor(params['gamma'], mindspore.float32)执行后获得结果》、
  • [活动体验] MindSpore Federated--端侧部署
    编译出包1. 配置编译环境。2. 开启联邦编译选项,在mindspore根目录进行编译,编译包含aarch64和aarch32的AAR包代码如下:export MSLITE_ENABLE_FL=onbash build.sh -A on -j32获取生成的Android AAR包。如下:mindspore-lite-maven-{version}.zip运行时要注意运行依赖:所以要构建运行依赖:将文件mindspore-lite-maven-{version}.zip解压后,所得到的目录结构如下所示:mindspore-lite-maven-{version}└── mindspore└── mindspore-lite└── {version}└── mindspore-lite-{version}.aar # MindSpore Lite训练框架AAR包由此可知联邦学习相关的AAR包路径是:mindspore/output/mindspore/mindspore-lite/{version}/mindspore-lite-{version}.aar其中AAR包中与联邦学习相关的目录结构如下:mindspore-lite-{version}├── jni│ ├── arm64-v8a│ │ ├── libjpeg.so # 图像处理动态库文件│ │ ├── libminddata-lite.so # 图像处理动态库文件│ │ ├── libmindspore-lite.so # MindSpore Lite推理框架依赖的动态库│ │ ├── libmindspore-lite-jni.so # MindSpore Lite推理框架依赖的jni动态库│ │ ├── libmindspore-lite-train.so # MindSpore Lite训练框架依赖的动态库│ │ ├── libmindspore-lite-train-jni.so # MindSpore Lite训练框架依赖的jni动态库│ │ └── libturbojpeg.so # 图像处理动态库文件│ └── armeabi-v7a│ ├── libjpeg.so # 图像处理动态库文件│ ├── libminddata-lite.so # 图像处理动态库文件│ ├── libmindspore-lite.so # MindSpore Lite推理框架依赖的动态库│ ├── libmindspore-lite-jni.so # MindSpore Lite推理框架依赖的jni动态库│ ├── libmindspore-lite-train.so # MindSpore Lite训练框架依赖的动态库│ ├── libmindspore-lite-train-jni.so # MindSpore Lite训练框架依赖的jni动态库│ └── libturbojpeg.so # 图像处理动态库文件├── libs│ ├── mindspore-lite-java-common.jar # MindSpore Lite训练框架jar包│ └── mindspore-lite-java-flclient.jar # 联邦学习框架jar包└── classes.jar # MindSpore Lite训练框架jar包注意,由于生成Android环境中的联邦学习jar包时未包含所依赖的第三方开源软件包,因此在Android环境中,使用AAR包前,需要用户在Android工程下的app/build.gradle文件的dependencies{}字段中添加相关依赖语句,用于加载联邦学习所依赖的三个开源软件,如下所示:dependencies {//添加联邦学习所依赖第三方开源软件implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.14.9'implementation group: 'com.google.flatbuffers', name: 'flatbuffers-java', version: '2.0.0'implementation(group: 'org.bouncycastle',name: 'bcprov-jdk15on', version: '1.68')}联邦学习依赖的第三方开源软件bcprov-jdk15on包含多版本class文件,为防止低版本jdk编译高版本class文件出错,在Android工程的gradle.properties文件中可添加如下设置语句:android.jetifier.blacklist=bcprov工程中设置好了如上所示依赖之后,只需依赖 AAR包即可调用联邦学习提供的相关接口x86环境编译出包3. 配置编译环境。4. 在mindspore根目录进行编译,编译x86架构相关包。bash build.sh -I x86_64 -j32获取生成的x86架构相关包。如下:mindspore/output/mindspore-lite-{version}-linux-x64.tar.gz构建运行依赖环境:代码如下:mindspore-lite-{version}-linux-x64├── tools│ ├── benchmark_train # 训练模型性能与精度调测工具│ ├── converter # 模型转换工具│ └── cropper # 库裁剪工具│ ├── cropper # 库裁剪工具可执行文件│ └── cropper_mapping_cpu.cfg # 裁剪cpu库所需的配置文件└── runtime├── include # 训练框架头文件│ └── registry # 自定义算子注册头文件├── lib # 训练框架库│ ├── libminddata-lite.a # 图像处理静态库文件│ ├── libminddata-lite.so # 图像处理动态库文件│ ├── libmindspore-lite-jni.so # MindSpore Lite推理框架依赖的jni动态库│ ├── libmindspore-lite-train.a # MindSpore Lite训练框架依赖的静态库│ ├── libmindspore-lite-train.so # MindSpore Lite训练框架依赖的动态库│ ├── libmindspore-lite-train-jni.so # MindSpore Lite训练框架依赖的jni动态库│ ├── libmindspore-lite.a # MindSpore Lite推理框架依赖的静态库│ ├── libmindspore-lite.so # MindSpore Lite推理依赖的动态库│ ├── mindspore-lite-java.jar # MindSpore Lite训练框架jar包│ └── mindspore-lite-java-flclient.jar # 联邦学习框架jar包└── third_party└── libjpeg-turbo└── lib├── libjpeg.so.62 # 图像处理动态库文件└── libturbojpeg.so.0 # 图像处理动态库文件其中联邦学习所需的相关x86包名如下:libjpeg.so.62 # 图像处理动态库文件libminddata-lite.so # 图像处理动态库文件libmindspore-lite.so # MindSpore Lite推理框架依赖的动态库libmindspore-lite-jni.so # MindSpore Lite推理框架依赖的jni动态库libmindspore-lite-train.so # MindSpore Lite训练框架依赖的动态库libmindspore-lite-train-jni.so # MindSpore Lite训练框架的jni动态库libturbojpeg.so.0 # 图像处理动态库文件mindspore-lite-java-flclient.jar # 联邦学习框架jar包在x86中设置环境变量(export LD_LIBRARY_PATH=/resource/x86libs/:$LD_LIBRARY_PATH
  • [活动体验] MindSpore Federated---云侧部署
    MindSpore Federated Learning Server集群物理架构如图所示:如上图所示,在联邦学习云侧集群中,有两种角色的MindSpore进程:Federated Learning Scheduler和Federated Learning Server:Federated Learning SchedulerScheduler的作用主要有两点:协助集群组网:在集群初始化阶段,由Scheduler负责收集Server信息,并达成集群一致性。`开放管理面:支持用户通过RESTful接口对集群进行管理。在一个联邦学习任务中,只有一个Scheduler,与Server通过TCP协议通信。Federated Learning ServerServer为执行联邦学习任务的主体,用于接收和解析来自端侧设备的数据,具有执行安全聚合、限时通信、模型存储等能力。在一个联邦学习任务中,Server可以有多个(用户可配置),Server间通过TCP协议通信,对外开放HTTP端口用于端侧设备连接。在MindSpore联邦学习框架中,Server还支持弹性伸缩以及容灾,能够在训练任务不中断的情况下,动态调配硬件资源。Scheduler和Server需部署在单网卡的服务器或者容器中,且处于相同网段。MindSpore自动获取首个可用IP地址作为Server地址。参数配置MindSpore联邦学习任务进程复用了训练脚本,用户只需要使用相同的脚本,并通过Python接口set_fl_context传递不同的参数,启动不同角色的MindSpore进程在确定参数配置后,用户需要在执行训练前调用set_fl_context接口,调用方式如下:代码如下:import mindspore.context as contextenable_fl = Trueserver_mode = "FEDERATED_LEARNING"ms_role = "MS_SERVER"server_num = 4scheduler_ip = "192.168.216.124"scheduler_port = 6667fl_server_port = 6668fl_name = "LeNet"scheduler_manage_port = 11202config_file_path = "./config.json"fl_ctx = {"enable_fl": enable_fl,"server_mode": server_mode,"ms_role": ms_role,"server_num": server_num,"scheduler_ip": scheduler_ip,"scheduler_port": scheduler_port,"fl_server_port": fl_server_port,"fl_name": fl_name,"scheduler_manage_port": scheduler_manage_port,"config_file_path": config_file_path}context.set_fl_context(**fl_ctx)model.train()建议将参数配置通过Python argparse模块传入,以下是部分关键参数传入脚本的示例:代码如下:import argparseparser = argparse.ArgumentParser()parser.add_argument("--server_mode", type=str, default="FEDERATED_LEARNING")parser.add_argument("--ms_role", type=str, default="MS_SERVER")parser.add_argument("--server_num", type=int, default=4)parser.add_argument("--scheduler_ip", type=str, default="192.168.216.124")parser.add_argument("--scheduler_port", type=int, default=6667)parser.add_argument("--fl_server_port", type=int, default=6668)parser.add_argument("--fl_name", type=str, default="LeNet")parser.add_argument("--scheduler_manage_port", type=int, default=11202)parser.add_argument("--config_file_path", type=str, default="")args, t = parser.parse_known_args()server_mode = args.server_modems_role = args.ms_roleserver_num = args.server_numscheduler_ip = args.scheduler_ipscheduler_port = args.scheduler_portfl_server_port = args.fl_server_portfl_name = args.fl_namescheduler_manage_port = args.scheduler_manage_portconfig_file_path = args.config_file_path启动集群代码如下:mobile/├── config.json├── finish_mobile.py├── run_mobile_sched.py├── run_mobile_server.py├── src│ └── model.py└── test_mobile_lenet.py要注意的是:config.json:配置文件,用于安全能力配置,容灾等。finish_mobile.py:由于Server集群为常驻进程,使用本文件手动退出集群。run_mobile_sched.py:启动Scheduler。run_mobile_server.py:启动Server。model.py:网络模型。test_mobile_lenet.py:训练脚本启动Schedulerrun_mobile_sched.py是为用户启动Scheduler而提供的Python脚本,并支持通过argparse传参修改配置。执行指令如下,代表启动本次联邦学习任务的Scheduler,其TCP端口为6667,联邦学习HTTP服务端口为6668,Server数量为4个,集群Scheduler管理端口为11202:python run_mobile_sched.py --scheduler_ip=192.168.216.124 --scheduler_port=6667 --fl_server_port=6668 --server_num=4 --scheduler_manage_port=11202启动Serverrun_mobile_server.py是为用户启动若干Server而提供的Python脚本,并支持通过argparse传参修改配置。执行指令如下,代表启动本次联邦学习任务的Server,其TCP端口为6667,联邦学习HTTP服务起始端口为6668,Server数量为4个,联邦学习任务正常进行需要的端侧设备数量为8个:python run_mobile_server.py --scheduler_ip=192.168.216.124 --scheduler_port=6667 --fl_server_port=6668 --server_num=4 --start_fl_job_threshold=8若想让Server分布式部署在不同物理节点,可以使用local_server_num参数,代表在本节点需要执行的Server进程数量:# 在节点1启动3个Server进程python run_mobile_server.py --scheduler_ip=192.168.216.124 --scheduler_port=6667 --fl_server_port=6668 --server_num=4 --start_fl_job_threshold=8 --local_server_num=3# 在节点2启动1个Server进程python run_mobile_server.py --scheduler_ip=192.168.216.124 --scheduler_port=6667 --fl_server_port=6668 --server_num=4 --start_fl_job_threshold=8 --local_server_num=1停止联邦学习 当前版本联邦学习集群为常驻进程,也可以执行finish_mobile.py脚本用于中途停止联邦学习服务器,执行如下指令来停止联邦学习集群,其中scheduler_port传参和启动服务器时的传参保持一致,代表停止此Scheduler对应的集群。python finish_mobile.py --scheduler_port=6667可看到如下结果:
  • [数据处理] 【mindspore】【faster_rcnn】pad补齐之后的数据,如何将补齐的0那部分去掉
    【功能模块】有个疑惑,这个问题一直灭有彻底弄明白。哪位老师提交的official/cv/faster_rcnn · MindSpore/models - 码云 - 开源中国 (gitee.com)    faster_rcnn的模型代码?数据pad填充,做batch之后。如何在求loss得时候将补齐之后得到得数据中得零去除掉?麻烦讲解一下,之前就有这个疑惑,也提过问题,之前我是tensor和数组之间转换去除得零元素。现在在graph模式下,construct部分,不能使用普通得numpy。还希望有位老师可以仔细地讲解一下。十分感谢
  • [执行问题] 【昇腾产品】【MindSpore功能】昇腾310推理卡上跑MindSpore.ops中的算子,执行失败
    【功能模块】昇腾310推理卡上跑MindSpore.ops中的算子,执行失败,同样的代码在昇腾910上执行没有问题。算子代码示例如下:x = Tensor(np.array([[[[0.1], [0.2]],[[0.3], [0.4]]]]), mindspore.float32)lrn = ops.LRN()output = lrn(x)print(output)【操作步骤&问题现象】1、在昇腾310推理卡上执行MindSpore.ops中的算子2、执行报错,具体信息如下:[ERROR] DEVICE(24646,7ff64f3a5700,python3.7):2021-11-27-16:18:03.663.456 [mindspore/ccsrc/runtime/device/ascend/ascend_memory_manager.cc:40] GetDeviceHBMSize] Get Device HBM memory size failed, ret = 0, total = 0Traceback (most recent call last):File "/home/autoai/scheduler/schedule.py", line 78, in schedulemsg = run_ai_workload(func, conf_dir, lib_dir, args, info)File "/home/autoai/scheduler/schedule.py", line 102, in run_ai_workloadfunc(conf_dir, lib_dir, args)File "/home/autoai/wrapper/workloads/activation/activation.py", line 46, in activationstart_time, end_time, transaction_count = execute_tasks(funcs)File "/home/autoai/wrapper/wrapper_base.py", line 38, in wrapperfunc(*args, **kwargs)File "/home/autoai/wrapper/wrapper_base.py", line 68, in execute_tasksfunc['method'](*func['args'])File "/opt/Python-3.7.5/lib/python3.7/site-packages/mindspore/ops/primitive.py", line 247, in __call__return _run_op(self, self.name, args)File "/opt/Python-3.7.5/lib/python3.7/site-packages/mindspore/common/api.py", line 75, in wrapperresults = fn(*arg, **kwargs)File "/opt/Python-3.7.5/lib/python3.7/site-packages/mindspore/ops/primitive.py", line 649, in _run_opoutput = real_run_op(obj, op_name, args)RuntimeError: mindspore/ccsrc/runtime/device/ascend/ascend_memory_manager.cc:40 GetDeviceHBMSize] Get Device HBM memory size failed, ret = 0, total = 0【截图信息】见附件【日志信息】(可选,上传日志内容或者附件)
  • [其他问题] mindspore安装问题
    【功能模块】mindspore安装问题【操作步骤&问题现象】1安装时已经进行import mindspore验证,并未报错2、电脑之前装过,并且也运行过jupyter【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [分布式] 【MindSpore产品】【多卡GPU训练功能】参数应该怎么设置
    【功能模块】MindSpore模型代码,多GPU训练【操作步骤&问题现象】1、基于ViT的codebase进行代码修改,想在GPU环境多卡训练,请问 https://gitee.com/mindspore/models/tree/master/official/cv/vit 这个代码库可以多GPU训练吗?2、如果可以的话,参数应该怎么设置,主要是 RANK_TABLE_FILE 参数,提供的hccl配置文件链接失效【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [公告] 云创大数据加入昇思MindSpore社区,对轨道关键部位螺栓状态高清监控,预防螺栓异常导致的安全隐患!
    MindSpore官方资料GitHub : https://github.com/mindspore-ai/mindsporeGitee : https : //gitee.com/mindspore/mindspore官方QQ群 : 486831414
  • [公告] 库柏特加入昇思MindSpore社区,实现药品从流通渠道到医院药房到终端应用环节的端到端物流管理!
    MindSpore官方资料GitHub : https://github.com/mindspore-ai/mindsporeGitee : https : //gitee.com/mindspore/mindspore官方QQ群 : 486831414
  • [公告] 云问科技加入昇思MindSpore社区,实现智能知识管理,为政企单位营销、服务等环节提供机器人知识问答支撑!
    MindSpore官方资料GitHub : https://github.com/mindspore-ai/mindsporeGitee : https : //gitee.com/mindspore/mindspore官方QQ群 : 486831414
  • [公告] 倍特威视加入昇思MindSpore社区,搭建智能视频分析系统,对园区不安全行为进行实时预警!
    MindSpore官方资料GitHub : https://github.com/mindspore-ai/mindsporeGitee : https : //gitee.com/mindspore/mindspore官方QQ群 : 486831414
  • [公告] 极目智能加入昇思MindSpore社区,构建汽车盲区智能检测系统,实现准确的车外环境态势感知!
    MindSpore官方资料GitHub : https://github.com/mindspore-ai/mindsporeGitee : https : //gitee.com/mindspore/mindspore官方QQ群 : 486831414
  • [公告] 积微物联加入昇思MindSpore社区,高效识别破损坩埚,提高流水线效率与智能化!
    MindSpore官方资料GitHub : https://github.com/mindspore-ai/mindsporeGitee : https : //gitee.com/mindspore/mindspore官方QQ群 : 486831414
  • [公告] 微创光电加入昇思MindSpore社区,实时分析高速公路监控视频,实现对交通事件和交通流量的准确检测!
    MindSpore官方资料GitHub : https://github.com/mindspore-ai/mindsporeGitee : https : //gitee.com/mindspore/mindspore官方QQ群 : 486831414