Parsl - Parallel Scripting Library¶
Parsl is a flexible and scalable parallel programming library for Python.
Parsl augments Python with simple constructs for encoding parallelism. Developers annotate
Python functions to specify opportunities for concurrent execution. These annotated
functions, called apps
, may represent pure Python functions or calls to external
applications. Parsl further allows invocations of these apps, called tasks
, to be
connected by shared input/output data (e.g., Python objects or files) via which Parsl
constructs a dynamic dependency graph of tasks to manage concurrent task execution where possible.
Parsl includes an extensible and scalable runtime that allows it to efficiently execute Parsl programs on one or many processors. Parsl programs are portable, enabling them to be easily moved between different execution resources: from laptops to supercomputers. When executing a Parsl program, developers must define (or import) a Python configuration object that outlines where and how to execute tasks. Parsl supports various target resources including clouds (e.g., Amazon Web Services and Google Cloud), clusters (e.g., using Slurm, Torque/PBS, HTCondor, Cobalt), and container orchestration systems (e.g., Kubernetes). Parsl scripts can scale from several cores on a single computer through to hundreds of thousands of cores across many thousands of nodes on a supercomputer.
Parsl can be used to implement various parallel computing paradigms:
Concurrent execution of tasks in a bag-of-tasks program.
Procedural workflows in which tasks are executed following control logic.
Parallel dataflow in which tasks are executed when their data dependencies are met.
Many-task applications in which many computing resources are used to perform various computational tasks.
Dynamic workflows in which the workflow is dynamically determined during execution.
Interactive parallel programming through notebooks or interactive.
- Quickstart
- User guide
- Overview
- Apps
- Futures
- Communication and data
- Execution
- Error handling
- App caching
- Checkpointing
- Configuration
- How to Configure
- Heterogeneous Resources
- Ad-Hoc Clusters
- Amazon Web Services
- ASPIRE 1 (NSCC)
- Blue Waters (NCSA)
- CC-IN2P3
- CCL (Notre Dame, with Work Queue)
- Comet (SDSC)
- Cooley (ALCF)
- Cori (NERSC)
- Frontera (TACC)
- Kubernetes Clusters
- Midway (RCC, UChicago)
- Open Science Grid
- Stampede2 (TACC)
- Summit (ORNL)
- Theta (ALCF)
- Further help
- Monitoring
- Example parallel patterns
- Structuring Parsl programs
- Performance and Scalability
- Usage statistics collection
- FAQ
- How can I debug a Parsl script?
- How can I view outputs and errors from apps?
- How can I make an App dependent on multiple inputs?
- Can I pass any Python object between apps?
- How do I specify where apps should be run?
- Workers do not connect back to Parsl
- parsl.dataflow.error.ConfigurationError
- Remote execution fails with SystemError(unknown opcode)
- Parsl complains about missing packages
- zmq.error.ZMQError: Invalid argument
- How do I run code that uses Python2.X?
- Parsl hangs
- How can I start a Jupyter notebook over SSH?
- How can I sync my conda environment and Jupyter environment?
- Addressing SerializationError
- How do I cite Parsl?
- Reference guide
- parsl.set_stream_logger
- parsl.set_file_logger
- parsl.addresses.address_by_hostname
- parsl.addresses.address_by_interface
- parsl.addresses.address_by_query
- parsl.addresses.address_by_route
- parsl.app.app.python_app
- parsl.app.app.bash_app
- parsl.app.futures.DataFuture
- parsl.config.Config
- parsl.dataflow.futures.AppFuture
- parsl.dataflow.dflow.DataFlowKernelLoader
- parsl.data_provider.data_manager.DataManager
- parsl.data_provider.data_manager.Staging
- parsl.data_provider.files.File
- parsl.data_provider.ftp.FTPSeparateTaskStaging
- parsl.data_provider.ftp.FTPInTaskStaging
- parsl.data_provider.file_noop.NoOpFileStaging
- parsl.data_provider.globus.GlobusStaging
- parsl.data_provider.http.HTTPSeparateTaskStaging
- parsl.data_provider.http.HTTPInTaskStaging
- parsl.data_provider.rsync.RSyncStaging
- parsl.executors.base.ParslExecutor
- parsl.executors.ThreadPoolExecutor
- parsl.executors.HighThroughputExecutor
- parsl.executors.WorkQueueExecutor
- parsl.executors.ExtremeScaleExecutor
- parsl.executors.swift_t.TurbineExecutor
- parsl.channels.LocalChannel
- parsl.channels.SSHChannel
- parsl.channels.OAuthSSHChannel
- parsl.channels.SSHInteractiveLoginChannel
- parsl.providers.AdHocProvider
- parsl.providers.AWSProvider
- parsl.providers.CobaltProvider
- parsl.providers.CondorProvider
- parsl.providers.GoogleCloudProvider
- parsl.providers.GridEngineProvider
- parsl.providers.JetstreamProvider
- parsl.providers.LocalProvider
- parsl.providers.LSFProvider
- parsl.providers.GridEngineProvider
- parsl.providers.SlurmProvider
- parsl.providers.TorqueProvider
- parsl.providers.KubernetesProvider
- parsl.providers.PBSProProvider
- parsl.launchers.SimpleLauncher
- parsl.launchers.SingleNodeLauncher
- parsl.launchers.SrunLauncher
- parsl.launchers.AprunLauncher
- parsl.launchers.SrunMPILauncher
- parsl.launchers.GnuParallelLauncher
- parsl.launchers.MpiExecLauncher
- parsl.launchers.JsrunLauncher
- parsl.launchers.WrappedLauncher
- parsl.monitoring.MonitoringHub
- parsl.app.errors.AppBadFormatting
- parsl.app.errors.AppException
- parsl.app.errors.AppTimeout
- parsl.app.errors.BadStdStreamFile
- parsl.app.errors.BashAppNoReturn
- parsl.app.errors.BashExitFailure
- parsl.app.errors.MissingOutputs
- parsl.app.errors.NotFutureError
- parsl.app.errors.ParslError
- parsl.executors.errors.ControllerError
- parsl.executors.errors.ExecutorError
- parsl.executors.errors.ScalingFailed
- parsl.executors.errors.InsufficientMPIRanks
- parsl.executors.errors.DeserializationError
- parsl.executors.errors.BadMessage
- parsl.dataflow.error.DataFlowException
- parsl.dataflow.error.ConfigurationError
- parsl.dataflow.error.DuplicateTaskError
- parsl.dataflow.error.BadCheckpoint
- parsl.dataflow.error.DependencyError
- parsl.launchers.error.BadLauncher
- parsl.providers.error.ExecutionProviderException
- parsl.providers.error.OptionalModuleMissing
- parsl.providers.error.ChannelRequired
- parsl.providers.error.ScaleOutFailed
- parsl.providers.error.SchedulerMissingArgs
- parsl.providers.error.ScriptPathError
- parsl.channels.errors.ChannelError
- parsl.channels.errors.BadHostKeyException
- parsl.channels.errors.BadScriptPath
- parsl.channels.errors.BadPermsScriptPath
- parsl.channels.errors.FileExists
- parsl.channels.errors.AuthException
- parsl.channels.errors.SSHException
- parsl.channels.errors.FileCopyException
- parsl.executors.high_throughput.errors.WorkerLost
- Developer documentation
- Contributing
- Changelog
- Libsubmit Changelog
- Swift vs Parsl
- Roadmap
- Developer Guide
- Packaging