def init(project): """ Initialize new project at the current dir. After init run your command. Example: floyd run 'python tensorflow.py > /output/model.1' """ project_obj = ProjectClient().get_by_name(project) if not project_obj: create_project_base_url = "{}/projects/create".format( floyd.floyd_web_host) create_project_url = "{}?name={}".format(create_project_base_url, project) floyd_logger.error( ("Project name does not match your list of projects. " "Create your new project in the web dashboard:\n\t%s"), create_project_base_url) webbrowser.open(create_project_url) return experiment_config = ExperimentConfig(name=project, family_id=project_obj.id) ExperimentConfigManager.set_config(experiment_config) FloydIgnoreManager.init() floyd_logger.info( "Project \"{}\" initialized in current directory".format(project))
def init(project): """ Initialize new project at the current dir. After init run your command. Example: floyd run python tensorflow.py > /output/model.1 """ experiment_config = ExperimentConfig(name=project, family_id=generate_uuid()) ExperimentConfigManager.set_config(experiment_config) FloydIgnoreManager.init() floyd_logger.info( "Project \"{}\" initialized in current directory".format(project))
def init(project_name): """ Initialize new project at the current dir. After init run your command. Example: floyd run 'python tensorflow.py > /output/model.1' """ project_obj = ProjectClient().get_by_name(project_name) if not project_obj: namespace, name = get_namespace_from_name(project_name) create_project_base_url = "{}/projects/create".format( floyd.floyd_web_host) create_project_url = "{}?name={}&namespace={}".format( create_project_base_url, name, namespace) floyd_logger.info(('Project name does not yet exist on floydhub.com. ' 'Create your new project on floydhub.com:\n\t%s'), create_project_base_url) webbrowser.open(create_project_url) name = click.prompt( 'Press ENTER to use project name "%s" or enter a different name' % project_name, default=project_name, show_default=False) project_name = name.strip() or project_name project_obj = ProjectClient().get_by_name(project_name) if not project_obj: raise FloydException( 'Project "%s" does not exist on floydhub.com. Ensure it exists before continuing.' % project_name) namespace, name = get_namespace_from_name(project_name) experiment_config = ExperimentConfig(name=name, namespace=namespace, family_id=project_obj.id) ExperimentConfigManager.set_config(experiment_config) FloydIgnoreManager.init() yaml_config = read_yaml_config() if not yaml_config: copyfile(os.path.join(os.path.dirname(__file__), 'default_floyd.yml'), 'floyd.yml') floyd_logger.info("Project \"%s\" initialized in current directory", project_name)
def run(ctx, gpu, env, data, mode, command): """ Run a command on Floyd. Floyd will upload contents of the current directory and run your command remotely. This command will generate a run id for reference. """ command_str = ' '.join(command) experiment_config = ExperimentConfigManager.get_config() access_token = AuthConfigManager.get_access_token() version = experiment_config.version experiment_name = "{}/{}:{}".format(access_token.username, experiment_config.name, version) # Create module module = Module(name=experiment_name, description=version, command=command_str, mode=get_mode_parameter(mode), family_id=experiment_config.family_id, default_container=get_docker_image(env, gpu), version=version) module_id = ModuleClient().create(module) floyd_logger.debug("Created module with id : {}".format(module_id)) # Create experiment request instance_type = GPU_INSTANCE_TYPE if gpu else CPU_INSTANCE_TYPE experiment_request = ExperimentRequest(name=experiment_name, description=version, module_id=module_id, data_id=data, predecessor=experiment_config.experiment_predecessor, family_id=experiment_config.family_id, version=version, instance_type=instance_type) experiment_id = ExperimentClient().create(experiment_request) floyd_logger.debug("Created experiment : {}".format(experiment_id)) # Update expt config including predecessor experiment_config.increment_version() experiment_config.set_module_predecessor(module_id) experiment_config.set_experiment_predecessor(experiment_id) ExperimentConfigManager.set_config(experiment_config) table_output = [["RUN ID", "NAME", "VERSION"], [experiment_id, experiment_name, version]] floyd_logger.info(tabulate(table_output, headers="firstrow")) floyd_logger.info("") if mode != 'default': while True: # Wait for the experiment to become available try: experiment = ExperimentClient().get(experiment_id) break except Exception: floyd_logger.debug("Experiment not available yet: {}".format(experiment_id)) sleep(1) continue # Print the path to jupyter notebook if mode == 'jupyter': jupyter_url = get_task_url(get_module_task_instance_id(experiment.task_instances)) floyd_logger.info("Waiting for Jupyter notebook to become available ...") if wait_for_url(jupyter_url): floyd_logger.info("\nPath to jupyter notebook: {}".format(jupyter_url)) else: floyd_logger.info("Problem starting the notebook. View logs for more information") # Print the path to serving endpoint if mode == 'serve': floyd_logger.info("Path to service endpoint: {}".format( get_task_url(get_module_task_instance_id(experiment.task_instances)))) floyd_logger.info(""" To view logs enter: floyd logs {} """.format(experiment_id))