feat: update by provider & return index
This commit is contained in:
parent
69feface29
commit
4cc84f8b1e
@ -1 +1 @@
|
||||
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"string","name":"dataImage","type":"string"},{"indexed":false,"internalType":"string","name":"trainImage","type":"string"}],"name":"StartRun","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"choose","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"clusters","outputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"uint256","name":"gpuId","type":"uint256"},{"internalType":"uint256","name":"clusterSize","type":"uint256"},{"internalType":"bool","name":"available","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"clusterIndex","type":"uint256"}],"name":"getClusterInfo","outputs":[{"components":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"uint256","name":"gpuId","type":"uint256"},{"internalType":"uint256","name":"clusterSize","type":"uint256"},{"internalType":"bool","name":"available","type":"bool"}],"internalType":"struct Scheduler.Cluster","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClusters","outputs":[{"components":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"uint256","name":"gpuId","type":"uint256"},{"internalType":"uint256","name":"clusterSize","type":"uint256"},{"internalType":"bool","name":"available","type":"bool"}],"internalType":"struct Scheduler.Cluster[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfClusters","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gpuId","type":"uint256"},{"internalType":"uint256","name":"clusterSize","type":"uint256"}],"name":"registerCluster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"dataImage","type":"string"},{"internalType":"string","name":"trainImage","type":"string"},{"internalType":"uint256","name":"gpuId","type":"uint256"},{"internalType":"uint256","name":"clusterSize","type":"uint256"}],"name":"registerTaskWithConditions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tasks","outputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"address","name":"client","type":"address"},{"internalType":"string","name":"dataImage","type":"string"},{"internalType":"string","name":"trainImage","type":"string"},{"internalType":"uint256","name":"status","type":"uint256"}],"stateMutability":"view","type":"function"}]
|
||||
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"taskIndex","type":"uint256"},{"indexed":false,"internalType":"string","name":"dataImage","type":"string"},{"indexed":false,"internalType":"string","name":"trainImage","type":"string"}],"name":"StartRun","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"clusters","outputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"uint256","name":"gpuId","type":"uint256"},{"internalType":"uint256","name":"clusterSize","type":"uint256"},{"internalType":"bool","name":"available","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"clusterIndex","type":"uint256"}],"name":"getClusterInfo","outputs":[{"components":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"uint256","name":"gpuId","type":"uint256"},{"internalType":"uint256","name":"clusterSize","type":"uint256"},{"internalType":"bool","name":"available","type":"bool"}],"internalType":"struct Scheduler.Cluster","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClusters","outputs":[{"components":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"uint256","name":"gpuId","type":"uint256"},{"internalType":"uint256","name":"clusterSize","type":"uint256"},{"internalType":"bool","name":"available","type":"bool"}],"internalType":"struct Scheduler.Cluster[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfClusters","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gpuId","type":"uint256"},{"internalType":"uint256","name":"clusterSize","type":"uint256"}],"name":"registerCluster","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"dataImage","type":"string"},{"internalType":"string","name":"trainImage","type":"string"},{"internalType":"uint256","name":"gpuId","type":"uint256"},{"internalType":"uint256","name":"clusterSize","type":"uint256"}],"name":"registerTaskWithConditions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tasks","outputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"address","name":"client","type":"address"},{"internalType":"uint256","name":"clusterIndex","type":"uint256"},{"internalType":"string","name":"dataImage","type":"string"},{"internalType":"string","name":"trainImage","type":"string"},{"internalType":"uint256","name":"status","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"taskIndex","type":"uint256"},{"internalType":"uint256","name":"newStatus","type":"uint256"}],"name":"updateStatus","outputs":[],"stateMutability":"nonpayable","type":"function"}]
|
||||
@ -12,12 +12,13 @@ contract Scheduler {
|
||||
struct Task {
|
||||
address provider;
|
||||
address client;
|
||||
uint256 clusterIndex;
|
||||
string dataImage;
|
||||
string trainImage;
|
||||
uint256 status;
|
||||
}
|
||||
|
||||
event StartRun(address provider, string dataImage, string trainImage);
|
||||
event StartRun(address provider, uint256 taskIndex, string dataImage, string trainImage);
|
||||
|
||||
uint256 private randomNumber;
|
||||
Cluster[] public clusters;
|
||||
@ -28,23 +29,27 @@ contract Scheduler {
|
||||
return randomNumber;
|
||||
}
|
||||
|
||||
function registerCluster(uint256 gpuId, uint256 clusterSize) public {
|
||||
function registerCluster(uint256 gpuId, uint256 clusterSize) public returns (uint256) {
|
||||
address provider = msg.sender;
|
||||
clusters.push(Cluster(provider, gpuId, clusterSize, true));
|
||||
|
||||
return clusters.length - 1; // cluster index
|
||||
}
|
||||
|
||||
function _registerTaskWithSpecificCluster(string memory dataImage, string memory trainImage, uint256 clusterIndex) internal {
|
||||
function _registerTaskWithSpecificCluster(string memory dataImage, string memory trainImage, uint256 clusterIndex) internal returns (uint256) {
|
||||
require(clusters[clusterIndex].available, "This GPU Cluster has been chosen");
|
||||
clusters[clusterIndex].available = false;
|
||||
|
||||
address provider = clusters[clusterIndex].provider;
|
||||
address client = msg.sender;
|
||||
tasks.push(Task(provider, client, dataImage, trainImage, 1));
|
||||
tasks.push(Task(provider, client, clusterIndex, dataImage, trainImage, 0));
|
||||
|
||||
emit StartRun(provider, dataImage, trainImage);
|
||||
emit StartRun(provider, tasks.length-1, dataImage, trainImage);
|
||||
|
||||
return tasks.length - 1; // task index
|
||||
}
|
||||
|
||||
function registerTaskWithConditions(string memory dataImage, string memory trainImage, uint256 gpuId, uint256 clusterSize) public {
|
||||
function registerTaskWithConditions(string memory dataImage, string memory trainImage, uint256 gpuId, uint256 clusterSize) public returns (uint256) {
|
||||
uint256[] memory suitable_clusters = new uint256[](clusters.length);
|
||||
uint256 index = 0;
|
||||
for (uint256 i=0; i<clusters.length; i++) {
|
||||
@ -57,7 +62,25 @@ contract Scheduler {
|
||||
|
||||
// random
|
||||
index = _getRandomNumber() % index;
|
||||
_registerTaskWithSpecificCluster(dataImage, trainImage, suitable_clusters[index]);
|
||||
return _registerTaskWithSpecificCluster(dataImage, trainImage, suitable_clusters[index]); // return task index
|
||||
}
|
||||
|
||||
function updateStatus(uint256 taskIndex, uint256 newStatus) public {
|
||||
/*
|
||||
0: scheduling: waiting for the provider checking and update the status to 'downloading'
|
||||
1: downloading
|
||||
2: training
|
||||
3: error
|
||||
4: finished
|
||||
*/
|
||||
Task memory task = tasks[taskIndex];
|
||||
require(task.provider == msg.sender, "you are not the provider for this task");
|
||||
require(newStatus > task.status && newStatus<=4, "Not correct status code");
|
||||
task.status = newStatus;
|
||||
|
||||
if (newStatus == 3 || newStatus == 4){
|
||||
clusters[task.clusterIndex].available = true;
|
||||
}
|
||||
}
|
||||
|
||||
function getNumberOfClusters() public view returns (uint256) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user