Skip to main content

Module that manage SGE experiences, from parameters to grid executions

Project description

GridSearch-like on the grid

Searching good combinaisons of parameters happen quite ofter in ML-related task. I wrote a tool that help to achieve that. If you worked with the unix system call fork, you will see a similar approach with the API.

Installation

pip install easy_sge

Hello World example

In this example we wrote all combinaisons of hello/hi world/Idiap.

from easy_sge.experiences_manager import ExperienceBase

if __name__ == '__main__':
    if ExperienceBase.is_in_SGE(): # Write your task
        parameters = ExperienceBase.load_only_current()
        first = parameters['first']
        second = parameters['second']
        print('{} {}'.format(first, second))
    else: # Configure your task
        my_experience = ExperienceBase()
        my_experience.add_experience_key_values('first', ['hello', 'hi'])
        my_experience.add_experience_key_values('second', ['world', 'idiap'])

        my_experience.add_grid_parameter('-P', 'devel')
        my_experience.add_grid_parameter('-cwd', '')
        my_experience.add_grid_parameter('-N', 'hello_world')

        my_experience.run(sync=True)

Run the example python3 -m examples.hello_world then check the results after running the script (and waiting a little bit) ls -1 output/hello_world.o*

output/hello_world.o5439319.1
output/hello_world.o5439319.2
output/hello_world.o5439319.3
output/hello_world.o5439319.4

Each file contains the result of a combinaison. Let's check the content of the first one cat output/hello_world.o5439319.1

hello world

Get all results at once cat output/hello_world.o*

hello world
hi world
hello idiap
hi idiap

FizzBuzz example

We can also use task over a single parameter, like in fizzbuzz, which depend of n. Here an example with fizzbuzz from [1, 100]

from easy_sge.experiences_manager import ExperienceBase

if __name__ == '__main__':
    if ExperienceBase.is_in_SGE(): # Write your task
        parameters = ExperienceBase.load_only_current()
        n = parameters['n']
        my_str = ''
        if n % 3 == 0:
            my_str += 'Fizz'
        if n % 5 == 0:
            my_str += 'Buzz'
        if my_str == '':
            my_str = str(n)
        print('(n={:04d}) -> {}'.format(n, my_str))
    else: # Configure your task
        my_experience = ExperienceBase()
        my_experience.add_experience_key_values('n', list(range(1, 101)))

        my_experience.add_grid_parameter('-P', 'devel')
        my_experience.add_grid_parameter('-cwd', '')
        my_experience.add_grid_parameter('-N', 'fizzbuzz')

        my_experience.run(sync=True)

Run the example python3 -m examples.fizzbuzz

Get all results at once and sort by n cat output/fizzbuzz.o* | sort

(n=0001) -> 1
(n=0002) -> 2
(n=0003) -> Fizz
(n=0004) -> 4
(n=0005) -> Buzz
(n=0006) -> Fizz
(n=0007) -> 7
(n=0008) -> 8
(n=0009) -> Fizz
(n=0010) -> Buzz
(n=0011) -> 11
...
(n=0090) -> FizzBuzz
(n=0091) -> 91
(n=0092) -> 92
(n=0093) -> Fizz
(n=0094) -> 94
(n=0095) -> Buzz
(n=0096) -> Fizz
(n=0097) -> 97
(n=0098) -> 98
(n=0099) -> Fizz
(n=0100) -> Buzz

Using with conda environment

If you want to use the same conda environmenent than the experience runner, then just let python_executable parameter empty.

Otherwise you can use conda run with the python_executable parameter

my_experience = ExperienceBase(python_executable="/idiap/user/wdroz/conda_stuff/miniconda3/condabin/conda run -n rise-baseline python3")

you need to specify the full path of conda

Dev

Flit

Please install flit

Then run flit install --extras dev

From pip

You can alternatively install the dev environnement from pip with pip install "easy_sge[dev]"

Install pre-commit

Please install the pre-commit of the project with

pre-commit install

and for commit-msg

pre-commit install --hook-type commit-msg

Running tests

python -m pytest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

easy_sge-1.0.2.tar.gz (9.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

easy_sge-1.0.2-py2.py3-none-any.whl (7.4 kB view details)

Uploaded Python 2Python 3

File details

Details for the file easy_sge-1.0.2.tar.gz.

File metadata

  • Download URL: easy_sge-1.0.2.tar.gz
  • Upload date:
  • Size: 9.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.28.1

File hashes

Hashes for easy_sge-1.0.2.tar.gz
Algorithm Hash digest
SHA256 25a43876684f89a8dd0be49e096dc959279121e35e69df580b59e1ef089f7996
MD5 870aeee59c8b4f13b492491a51a1a954
BLAKE2b-256 d5e786dcd8487c72c164566018484a6ba9cf24b434508795d4fe550c13fe2de0

See more details on using hashes here.

File details

Details for the file easy_sge-1.0.2-py2.py3-none-any.whl.

File metadata

  • Download URL: easy_sge-1.0.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 7.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.28.1

File hashes

Hashes for easy_sge-1.0.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 52ee3874f41a7c7f0ddfcc590cc982a1032d928c71608b83f87aa8373d36c7bb
MD5 4eea5cc9b01da9e63bd9e048a18bdbc4
BLAKE2b-256 6c8ea20bf239d647ff35283420e2ad91321955d14094623c701fa4c76c655809

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page