Skip to content
Merged
58 changes: 33 additions & 25 deletions src/protocol/pay-per-task.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,42 @@
---
title: Pay Per Task Model
description:
Pricing model and task categories for iExec protocol, including computing and
deal time limits.
---
# Task size: pay-per-task

Check warning on line 1 in src/protocol/pay-per-task.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/pay-per-task.md#L1

[Google.Headings] 'Task size: pay-per-task' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] 'Task size: pay-per-task' should use sentence-style capitalization.", "location": {"path": "src/protocol/pay-per-task.md", "range": {"start": {"line": 1, "column": 3}}}, "severity": "WARNING"}

# Pay per task model
Pay-per-task categories, time limits, and claim rules.

We are introducing a new method for pricing and we have defined several task
categories that describe the execution boundaries. We'll setup a test
infrastructure so that application developers can evaluate the category of their
submissions. Conversely, worker pools will be able to benchmark their
infrastructures against the reference machine.
## Pay-per-task model

In the future, we'll redefine the categories, and provide more advanced tools
for helping developers to maximize the usage of the infrastructure
We base the pay-per-task model on task size categories. Each category defines

Check warning on line 7 in src/protocol/pay-per-task.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/pay-per-task.md#L7

[Google.We] Try to avoid using first-person plural like 'We'.
Raw output
{"message": "[Google.We] Try to avoid using first-person plural like 'We'.", "location": {"path": "src/protocol/pay-per-task.md", "range": {"start": {"line": 7, "column": 1}}}, "severity": "WARNING"}
two limits:

- Maximum Computing Time (C): per-task execution time on the worker. If the task

Check notice on line 10 in src/protocol/pay-per-task.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/pay-per-task.md#L10

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/pay-per-task.md", "range": {"start": {"line": 10, "column": 26}}}, "severity": "INFO"}
exceeds C, the worker stops the task and marks it as failed.
- Maximum Deal Time (D): overall time window for a task in the deal. If the task

Check notice on line 12 in src/protocol/pay-per-task.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/pay-per-task.md#L12

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/pay-per-task.md", "range": {"start": {"line": 12, "column": 21}}}, "severity": "INFO"}
isn’t completed within D, the requester can claim the task. On claim, the
requester can recover the RLC engaged for this task.

**Categories Description:**

| **Category** | **Maximum Computing Time (C)** | **Maximum Deal Time (D)** |
| ------------ | ------------------------------ | ------------------------- |
| 0 – XS | 5 min | 50 min |
| 1 – S | 20 min | 200 min (3h20m) |
| 2 – M | 1 hour | 10h |
| 3 – L | 3 hour | 30h (1d6h) |
| 4 – XL | 10 hour | 100h (4d4h) |

- Each worker will allocate **C** minutes to compute the application. If the
computation is not completed within this **Maximum Computing Time**, the
running application will be stopped.
- From a buyer perspective, a requester will be able to claim a task of a deal
after **D** minutes if the task is not completed within the **Maximum Deal
Time**.
| 1 – S | 20 min | 200 min |

Check failure on line 21 in src/protocol/pay-per-task.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/pay-per-task.md#L21

[Google.EmDash] Don't put a space before or after a dash.
Raw output
{"message": "[Google.EmDash] Don't put a space before or after a dash.", "location": {"path": "src/protocol/pay-per-task.md", "range": {"start": {"line": 21, "column": 4}}}, "severity": "ERROR"}
| 2 – M | 1 hour | 10 hours |

Check failure on line 22 in src/protocol/pay-per-task.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/pay-per-task.md#L22

[Google.EmDash] Don't put a space before or after a dash.
Raw output
{"message": "[Google.EmDash] Don't put a space before or after a dash.", "location": {"path": "src/protocol/pay-per-task.md", "range": {"start": {"line": 22, "column": 4}}}, "severity": "ERROR"}
| 3 – L | 3 hours | 30 hours |

Check failure on line 23 in src/protocol/pay-per-task.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/pay-per-task.md#L23

[Google.EmDash] Don't put a space before or after a dash.
Raw output
{"message": "[Google.EmDash] Don't put a space before or after a dash.", "location": {"path": "src/protocol/pay-per-task.md", "range": {"start": {"line": 23, "column": 4}}}, "severity": "ERROR"}
| 4 – XL | 10 hours | 100 hours |

Check failure on line 24 in src/protocol/pay-per-task.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/pay-per-task.md#L24

[Google.EmDash] Don't put a space before or after a dash.
Raw output
{"message": "[Google.EmDash] Don't put a space before or after a dash.", "location": {"path": "src/protocol/pay-per-task.md", "range": {"start": {"line": 24, "column": 4}}}, "severity": "ERROR"}

- Worker allocates up to C per task. Beyond C, the worker stops the task.
- Requesters can claim the task after D if the task isn’t completed.

Check failure on line 27 in src/protocol/pay-per-task.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/pay-per-task.md#L27

[Vale.Terms] Use 'requesters' instead of 'Requesters'.
Raw output
{"message": "[Vale.Terms] Use 'requesters' instead of 'Requesters'.", "location": {"path": "src/protocol/pay-per-task.md", "range": {"start": {"line": 27, "column": 3}}}, "severity": "ERROR"}

## How to pick a category: quick guide

Use this decision table to choose a safe category for your workload.

| **Typical workload** | **Suggested category** |
| ------------------------------------- | ---------------------- |
| Short scripts / small data processing | Cat 0–1 |
| Medium data processing / 10-15min | Cat 2 |

Check failure on line 36 in src/protocol/pay-per-task.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/pay-per-task.md#L36

[Google.Units] Put a nonbreaking space between the number and the unit in '15min'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '15min'.", "location": {"path": "src/protocol/pay-per-task.md", "range": {"start": {"line": 36, "column": 31}}}, "severity": "ERROR"}
| Heavy ML inference / long simulations | Cat 3–4 |

Use the iExec SDK to **set the category** in app, request, or workerpool

Check failure on line 39 in src/protocol/pay-per-task.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/pay-per-task.md#L39

[Vale.Terms] Use 'Workerpool' instead of 'workerpool'.
Raw output
{"message": "[Vale.Terms] Use 'Workerpool' instead of 'workerpool'.", "location": {"path": "src/protocol/pay-per-task.md", "range": {"start": {"line": 39, "column": 63}}}, "severity": "ERROR"}
orders.
For commands and examples, see the
[iExec SDK Github repository](https://github.com/iExecBlockchainComputing/iexec-sdk/blob/master/docs/README.md).