Giter VIP home page Giter VIP logo

rynner's Introduction

Rynner

Rynner project is currently under heavy development. You should expect a bumpy ride at this point and APIs, interfaces and names may change without warning. This project is currently not production-ready.

There are a large number of open issues, in particular on Windows platforms.

Documentation

Current documentation may be found at: https://rynner.readthedocs.io/

Persistent SSH connection (Linux)

Prerequisites

SSH installed, this should be default on all Linux machines. That automatically provides ssh-agent and ssh-add.

Add SSH keys to the agent as needed

Check your ~/.ssh directory, if there is a config file open it with a text editor, if no such file exists create it and repeat the step above. Add a new line AddKeysToAgent=yes and save the file.

Start ssh-agent automatically

Bash users

Add the following to your ~/.profile file:

export SSH_AUTH_SOCK=~/.ssh/ssh-agent.$HOSTNAME.sock
ssh-add -l 2>/dev/null >/dev/null
if [ $? -ge 2 ]; then
  ssh-agent -a "$SSH_AUTH_SOCK" >/dev/null
fi
export SSH_AGENT_PID=$(pgrep ssh-agent)

Zsh users

Add the following to your ~/.zprofile file:

export SSH_AUTH_SOCK=~/.ssh/ssh-agent.$HOST.sock
ssh-add -l 2>/dev/null >/dev/null
if [ $? -ge 2 ]; then
  ssh-agent -a "$SSH_AUTH_SOCK" >/dev/null
fi
export SSH_AGENT_PID=$(pgrep ssh-agent)

Install

We do not provide ready-to-install packages at the moment, but you can use the following command to install the latest version of Rynner:

pip install git+https://github.com/sa2c/Rynner.git

rynner's People

Contributors

gitter-badger avatar markgdawson avatar mmesiti avatar vkhodygo avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar

rynner's Issues

Pass QWidget to RunConfigView rather than a factory

The custom configuratoin view should be a simple QWidget instance widget rather than a class or factory. This would be simpler and more intuitive for the user to create. It also allows for factories/methods/classes as the user can just call them.

Dataset support

Sometimes a set of files should be uploaded once only for a number of runs. Support for datasets could be added, such sets would be symlinked on the remote machine would be useful for these cases. (Low priority)

Uploads and job submission blocks the GUI

Uploads, job submission etc should be handled in the host, and in a separate thread. The best option for this will be to run the runner itself completely in a separate thread.

Note that config data can be treated as immutable, with the exception of data added by the runner (i.e. to the datastore), which greatly simplifies the implementation.

Download files after run

Files should be downloaded locally and made available to post processing through function calls which provide the local directory.

Enforce host interface

A common interface for every host should be specified somewhere, probably as a list of kwargs. If a Plugin needs to extend this, it should be possible/reasonable.

Validate the PatterParser host_patterns

host_patterns (i.e. the pattern list to match against kwargs) should be validated when first loaded, i.e. that only valid kwargs are present, that each kwarg is present at least once. Also should validate that identical set of keys should not appear twice.

Fix raised error

The error raised at

raise InvalidContextOption('invalid format for uploads options: '

makes no sense, it should be either removed or replaced with a correct one.

It looks like it doesn't affect anything serious though.

Inconsistent remote paths on Windows

From a windows machine, remote paths are created as a single directory named 'rynner/plugin_id' rather than a directory rynner containing a directory plugin_id.

This is preventing the discovery of jobs which have been running or have been run on a windows platform.

Selectable interpreter

Currently the interpreter is hard-coded in the jobcard shebang to sh. Should it be possible to modify this on a per-job or per-plugin basis?

Allow non-hardcoded scheduler options

A slurm= or pbs= keyword for RunManger.new should allow options specific to a given host to be entered. In this way we can extend for a given scheduler without breaking the interface.

Show in folder

There should be a way to open the downloaded results folder in the default/OS file browser.

basic host configuration should be easier

Currently a user has to enter their details into a relatively cryptic YAML file in order to use the cluster, as well as generate an SSH key to use.

Ideally, a user should just supply their cluster username and password on first launch, and Rynner should create an SSH key, upload it to the cluster, and edit the cluster configuration YAML such that on future launches it knows the username and key location.

PluginCollection create view

The plugin collection should have a create view which allows the appropriate plugin to be selected and shows the appropriate view. Currently an exception is thrown in PluginCollection.

Put all communication in a background thread

The calls to connection and datastore should all be done asynchronously. This is expected to be implemented by the Connection object popping work onto a processing queue. All jobs to one host should go to the same queue, ensuring that the order in which transfers and commands are performed is maintained.

Multiple files and hosts

RunManager should be able to create a run on multiple hosts or multiple runs on the same host. A good way to mange this is required, e.g. a parent-child relationship between runs and a run container object at the top level. It may make sense to reflect this in the remote file system (i.e. a parent job containing the directory of a child job)

Code consolidation

There are some functions with similar if not identical functionality such as data transfer, they can be merged.
I'd also remove nested functions.

AutoAddPolicy

Paramiko uses auto-add policy, this could introduce vulnerabilities to MITM attacks.

TextField added to layout

Not tested that TextField (etc) gets added to QLayout. The tests only verify that TextField is a child of this parent.

Hosts selection not implemented

Each plugin should be able to operate easily with any host (default) or should be able to declare in an easy way its supported machines/types. Each plugin should be able to say it only supports specific machines (e.g a known set of clusters), or classes of machine (e.g. SlurmCluster). The eaiest way to achieve this is to provide a function for use with DropDownField, which filters on the global list of available hosts. It is then left to the user to support various hosts.

The problem remains on the best way to identify a cluster, presumably with some identifying string.

PatternParser plugin-specified defaults

Should be able to specify defaults to PatternParser on a per-plugin and per-host level. Each plugin should be able to specify defaults for a given host or host class.

Update caches details of historic jobs

sacct should only need to be called for jobs which are known to be completed. In this case we can store/retrieve info from the datastore.

A job list needs to be fetched from the server periodically, this could be just a job listing. Then, squeue (and/or sacct) would only be called if there are uncompleted jobs.

The job list should not be checked every time, ideally there should be a check for new jobs relatively rarely. When running jobs are known to exist, then we should check for updates of existing job progress more frequently.

squeue should potentially be used over sacct if possible.

* Host configuration for specific hosts

This is a hold-all issue for better control of host configuration and configuration for a specific host/cluster. Ideally plugin should be able to heavily customise the host behaviour if needed, without needing to re-invent the wheel.

Option Validation and Types

values of RunManager.new kwargs (e.g. walltime etc) should be validated. This could for example involve a given type in a given interval. Errors should be shown before the jobcard is written gets written, so that the errors can be handled before putting the job in the queue.

Stop jobs

Current jobs cannot be stopped. Stop button should call (on slurm) scancel with job id.

Downloads not implemented

The download option to the runner should result in an automatic download when the job has finished. In addition, there should be a way to explicitly initiate a download in postprocessing/actions.

Refactor PatternParser

Review the methods in PatternParser, some could maybe go into Host in the new architecture.

Config view validation

The config view should use QValidator to validate inputs and give user visible/instant feedback on invalid inputs.

Supurfluous datastore connection activity

QID should be read from the run on submission, and stored in datastore on first write, this avoids the need for reading a second time (i.e. supurfluous writes when reading job info from datastore)

Actions

Implement actions. Actions should be able to get hold of an instance of the parent/main window as arguments to the action function.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.