A Multi GPU Miner is Available for Ubuntu!

The current setup seems to incur an overhead proportional to the number of GPUs you are using. This is not something you can improve easily on your side. We’ll look into this more.

I’m unable to get it running on multiple gpu’s
tried building from source, any advice?

Hi bot :wink:

Well. Looks like 6 people found a way to fast track the mainnet with their results. I really wonder what should be optimized.

Where do you run into problems, it is hard to help without more details :wink:

in my epoch.yaml i have following

mining:
    beneficiary: "**myaddress**"
    autostart: true
    cuckoo:
        miner:
            executable: cuda29
            instances: 6
            edge_bits: 29
            hex_encoded_header: true

When i launch the epoch in my node it will just crash.

when i change it to following it will mine, but only on a single gpu

mining:
        beneficiary: "**myaddress**"
        autostart: true
        cuckoo:
            miner:
                executable: cuda29
                extra_args: "0,1,2,3,4,5"
                edge_bits: 29
                hex_encoded_header: true

I have build from source of multi gpu branch

If it crashes with the first configuration it unfortunately looks like you have not managed to pick up the branch correctly. Please look at the CUDA Miner Issue for some further details on how to check out (and verify you checked out the right thing) and build it.

I did it the right way i think

git clone https://github.com/aeternity/epoch.git epoch
cd epoch
git checkout multi_gpu

Tried doing both

make prod-build
make prod-package

And to build the cuda29 file

cd apps/aecuckoo
make cuda29

And then you install the package you did build presumably?

Could you share the error message you get when it crashes (in log/epoch.log most likely)?

hope this is somewhat helping

twm@founders:~/epoch-multi_gpu/_build/prod/rel/epoch$ tail log/epoch.log
2018-11-29 15:35:42.573 [error] <0.1069.0> Abort on error is set. Terminating sequence
2018-11-29 15:35:42.574 [error] <0.1069.0> Caught exception:
{validation_failed,[{error,[{data_invalid,#{<<"additionalProperties">> => false,<<"properties">> => #{<<"edge_bits">> => #{<<"default">> => 29,<<"description">> => <<"Number of bits used for representing an edge in the Cuckoo Cycle problem. It affects both PoW generation (mining) and verification. WARNING: Changing this makes the node incompatible with the chain of other nodes in the network, do not change from the default unless you know what you are doing.">>,<<"type">> => <<"integer">>},<<"executable">> => #{<<"default">> => <<"mean29-generic">>,<<"description">> => <<"Executable binary of the miner. Options are: \"mean29-generic\" (memory-intensive), \"mean29-avx2\" (memory-intensive, benefits from faster CPU supporting AVX2 instructions), \"lean29-generic\" (CPU-intensive, useful if memory-constrained), \"lean29-avx2\" (CPU-intensive, useful if memory-constrained, benefits from faster CPU supporting AVX2 instructions).">>,<<"type">> => <<"string">>},<<"extra_args">> => #{<<"default">> => <<"-t 1">>,<<"description">> => <<"Extra arguments to pass to the miner executable binary. The safest choice is specifying no arguments i.e. empty string.">>,<<"type">> => <<"string">>},<<"hex_encoded_header">> => #{<<"default">> => false,<<"description">> => <<"Hexadecimal encode the header argument that is send to the miner executable. CUDA executables expect hex encoded header.">>,<<"type">> => <<"boolean">>},<<"instances">> => #{<<"default">> => 1,<<"description">> => <<"Miner instances in case of Multi-GPU mining">>,<<"type">> => <<"integer">>},<<"nice">> => #{<<"description">> => <<"Miner process priority (niceness) in a UNIX fashion. Higher `nice` means lower priority. Keep it unset to inherit parent process priority.">>,<<"type">> => <<"integer">>}},<<"required">> => [<<"executable">>,<<"extra_args">>,<<"edge_bits">>],<<"type">> => <<"object">>},missing_required_property,<<"extra_args">>,[<<"mining">>,<<"cuckoo">>,<<"miner">>]}]}]}
[{setup,try_apply,4,[{file,"/home/twm/epoch-multi_gpu/_build/default/lib/setup/src/setup.erl"},{line,1144}]},{lists,foreach,2,[{file,"lists.erl"},{line,1338}]},{setup,run_setup_,0,[{file,"/home/twm/epoch-multi_gpu/_build/default/lib/setup/src/setup.erl"},{line,957}]},{setup,run_setup,0,[{file,"/home/twm/epoch-multi_gpu/_build/default/lib/setup/src/setup.erl"},{line,939}]},{setup_srv,handle_call,3,[{file,"/home/twm/epoch-multi_gpu/_build/default/lib/setup/src/setup_srv.erl"},{line,42}]},{gen_server,try_handle_call,4,[{file,"gen_server.erl"},{line,636}]},{gen_server,handle_msg,6,[{file,"gen_server.erl"},{line,665}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,247}]}]
2018-11-29 15:35:42.574 [error] <0.1069.0> gen_server setup_srv terminated with reason: {validation_failed,[{error,[{data_invalid,#{<<"additionalProperties">> => false,<<"properties">> => #{<<"edge_bits">> => #{<<"default">> => 29,<<"description">> => <<"Number of bits used for representing an edge in the Cuckoo Cycle problem. It affects both PoW generation (mining) and verification. WARNING: Changing this makes the node incompatible with the chain of other nodes in the network, do not change from the default unless you know what you are doing.">>,<<"type">> => <<"integer">>},...},...},...}]}]} in setup:run_setup/0 line 946
2018-11-29 15:35:42.574 [error] <0.1069.0> CRASH REPORT Process setup_srv with 0 neighbours crashed with reason: {validation_failed,[{error,[{data_invalid,#{<<"additionalProperties">> => false,<<"properties">> => #{<<"edge_bits">> => #{<<"default">> => 29,<<"description">> => <<"Number of bits used for representing an edge in the Cuckoo Cycle problem. It affects both PoW generation (mining) and verification. WARNING: Changing this makes the node incompatible with the chain of other nodes in the network, do not change from the default unless you know what you are doing.">>,<<"type">> => <<"integer">>},...},...},...}]}]} in setup:run_setup/0 line 946
2018-11-29 15:35:42.575 [error] <0.1068.0> Supervisor setup_sup had child setup_srv started with setup_srv:start_link() at <0.1069.0> exit with reason {validation_failed,[{error,[{data_invalid,#{<<"additionalProperties">> => false,<<"properties">> => #{<<"edge_bits">> => #{<<"default">> => 29,<<"description">> => <<"Number of bits used for representing an edge in the Cuckoo Cycle problem. It affects both PoW generation (mining) and verification. WARNING: Changing this makes the node incompatible with the chain of other nodes in the network, do not change from the default unless you know what you are doing.">>,<<"type">> => <<"integer">>},...},...},...}]}]} in setup:run_setup/0 line 946 in context child_terminated
2018-11-29 15:35:42.575 [debug] <0.1068.0> Supervisor setup_sup started setup_srv:start_link() at pid <0.1072.0>
2018-11-29 15:35:42.575 [error] <0.1066.0>@application_master:init:134 CRASH REPORT Process <0.1066.0> with 0 neighbours exited with reason: bad return value: {{setup_app,start_phase,[run_setup,normal,[]]},{'EXIT',{{{validation_failed,[{error,[{data_invalid,#{<<"additionalProperties">> => false,<<"properties">> => #{<<"edge_bits">> => #{<<"default">> => 29,<<"description">> => <<"Number of bits used for representing an edge in the Cuckoo Cycle problem. It affects both PoW generation (mining) and verification. WARNING: Changing this makes the node incompatible with the chain of other nodes in the network, do not change from the default unless ...">>,...},...},...},...}]}]},...},...}}} in application_master:init/4 line 134
2018-11-29 15:35:42.575 [info] <0.958.0> Application setup exited with reason: bad return value: {{setup_app,start_phase,[run_setup,normal,[]]},{'EXIT',{{{validation_failed,[{error,[{data_invalid,#{<<"additionalProperties">> => false,<<"properties">> => #{<<"edge_bits">> => #{<<"default">> => 29,<<"description">> => <<"Number of bits used for representing an edge in the Cuckoo Cycle problem. It affects both PoW generation (mining) and verification. WARNING: Changing this makes the node incompatible with the chain of other nodes in the network, do not change from the default unless ...">>,...},...},...},...}]}]},...},...}}}
1 Like

./bin/epoch check_config epoch.yaml gives the following output

twm@founders:~/epoch-multi_gpu/_build/prod/rel/epoch$ ./bin/epoch check_config epoch.yaml
Validation failed
Position: mining/cuckoominer
Value   : "extra_args"
Schema  :
{
  "additionalProperties": false,
  "properties": {
    "edge_bits": {
      "default": 29,
      "description": "Number of bits used for representing an edge in the Cuckoo Cycle problem. It affects both PoW generation (mining) and verification. WARNING: Changing this makes the node incompatible with the chain of other nodes in the network, do not change from the default unless you know what you are doing.",
      "type": "integer"
    },
    "executable": {
      "default": "mean29-generic",
      "description": "Executable binary of the miner. Options are: \"mean29-generic\" (memory-intensive), \"mean29-avx2\" (memory-intensive, benefits from faster CPU supporting AVX2 instructions), \"lean29-generic\" (CPU-intensive, useful if memory-constrained), \"lean29-avx2\" (CPU-intensive, useful if memory-constrained, benefits from faster CPU supporting AVX2 instructions).",
      "type": "string"
    },
    "extra_args": {
      "default": "-t 1",
      "description": "Extra arguments to pass to the miner executable binary. The safest choice is specifying no arguments i.e. empty string.",
      "type": "string"
    },
    "hex_encoded_header": {
      "default": false,
      "description": "Hexadecimal encode the header argument that is send to the miner executable. CUDA executables expect hex encoded header.",
      "type": "boolean"
    },
    "instances": {
      "default": 1,
      "description": "Miner instances in case of Multi-GPU mining",
      "type": "integer"
    },
    "nice": {
      "description": "Miner process priority (niceness) in a UNIX fashion. Higher `nice` means lower priority. Keep it unset to inherit parent process priority.",
      "type": "integer"
    }
  },
  "required": [
    "executable",
    "extra_args",
    "edge_bits"
  ],
  "type": "object"
}
Reason  : Missing required property
Configuration error (validation_failed)

Ah :man_facepalming:, sorry for not spotting immediately. You still have to have the field extra_args: "" it is mandatory even if you don’t need any extra arguments.

1 Like

YES that fixxed it!!
thanks bro!

2 Likes

Great! Glad I could help!

Beware though that it does not perform just as well as we hoped… As discussed above there seem to be a bottleneck starting multiple miners :frowning:

I tried this multigpu procedure but I am getting error while validating my epoch.yaml file. Here is the epoch.yaml file


sync:
port: 3115
external_port: 3015

keys:
dir: keys
peer_password: “Care2007”

http:
external:
port: 3013
internal:
port: 3113

websocket:
channel:
port: 3014

mining:
beneficiary: “ak_2b9RpA65prHs1sgeDGrUGsTLJ7hDx3Af4pNRDVigjaiTyXihQh”
autostart: true
cuckoo:
miner:
executable: cuda29
extra_args: “”
instances: 5
edge_bits: 29
hex_encoded_header: true

chain:
persist: true
db_path: ./chain

fork_management:
network_id: ae_mainnet

I triend extra arguments in my yaml file but still I am getting validation error. Please check my yaml file


sync:
port: 3115
external_port: 3015

keys:
dir: keys
peer_password: “Care2007”

http:
external:
port: 3013
internal:
port: 3113

websocket:
channel:
port: 3014

mining:
beneficiary: “ak_2b9RpA65prHs1sgeDGrUGsTLJ7hDx3Af4pNRDVigjaiTyXihQh”
autostart: true
cuckoo:
miner:
executable: cuda29
extra_args: “”
instances: 5
edge_bits: 29
hex_encoded_header: true

chain:
persist: true
db_path: ./chain

fork_management:
network_id: ae_mainnet

I am getting the following error when I am validating:
caremedical@caremedical:~/epoch$ ./bin/epoch check_config epoch.yaml
Validation failed
Position: autostart
Value : #{<<97,117,116,111,115,116,97,114,116>>=>true,<<98,101,110,101,102,105,99,105,97,114,121>>=><<97,107,95,50,98,57,82,112,65,54,53,112,114,72,115,49,115,103,101,68,71,114,85,71,115,84,76,74,55,104,68,120,51,65,102,52,112,78,82,68,86,105,103,106,97,105,84,121,88,105,104,81,104>>,<<99,104,97,105,110>>=>null,<<99,104,97,110,110,101,108>>=>null,<<99,117,99,107,111,111>>=>null,<<100,98,95,112,97,116,104>>=><<46,47,99,104,97,105,110>>,<<100,105,114>>=><<107,101,121,115>>,<<101,100,103,101,95,98,105,116,115>>=>29,<<101,120,101,99,117,116,97,98,108,101>>=><<99,117,100,97,50,57>>,<<101,120,116,101,114,110,97,108>>=>null,<<101,120,116,101,114,110,97,108,95,112,111,114,116>>=>3015,<<101,120,116,114,97,95,97,114,103,115>>=><<>>,<<102,111,114,107,95,109,97,110,97,103,101,109,101,110,116>>=>null,<<104,101,120,95,101,110,99,111,100,101,100,95,104,101,97,100,101,114>>=>true,<<104,116,116,112>>=>null,<<105,110,115,116,97,110,99,101,115>>=>1,<<105,110,116,101,114,110,97,108>>=>null,<<107,101,121,115>>=>null,<<109,105,110,101,114>>=>null,<<109,105,110,105,110,103>>=>null,<<110,101,116,119,111,114,107,95,105,100>>=><<97,101,95,109,97,105,110,110,101,116>>,<<112,101,101,114,95,112,97,115,115,119,111,114,100>>=><<67,97,114,101,50,48,48,55>>,<<112,101,114,115,105,115,116>>=>true,<<112,111,114,116>>=>3014,<<115,121,110,99>>=>null,<<119,101,98,115,111,99,107,101,116>>=>null}
Schema :
{
schema": "http://json-schema.org/draft-04/schema#", "additionalProperties": false, "definitions": { "key_value_pattern": { "pattern": "^[a-zA-Z0-9\\-_\\.]+\\h*:\\h*[0-9]+(\\h*,\\h*[a-zA-Z_]+\\h*:\\h*[0-9]+)*" } }, "properties": { "blocked_peers": { "description": "Pre-configured addresses of epoch nodes NOT to contact", "items": { "description": "Aeternity Node address", "example": "aenode://[email protected]:3015", "pattern": "^aenode://pp_[a-zA-Z0-9]+@[^:\\.\"!#%^&()',/]+(\.[^:\."!#%^&*()',/]+)*:[0-9]+/*",
“type”: “string”
},
“type”: “array”
},
“chain”: {
“additionalProperties”: false,
“properties”: {
“db_path”: {
“description”: “The directory where the chain is persisted to disk.”,
“type”: “string”
},
“hard_forks”: {
“additionalProperties”: false,
“description”: “The consensus protocol versions with respective effective heights”,
“patternProperties”: {
"^[1-9][0-9]
$”: {
“description”: “Minimum height at which protocol is effective”,
“minimum”: 0,
“type”: “integer”
}
},
“type”: “object”
},
“persist”: {
“description”: “If true, all changes to the chain are written to disk.”,
“type”: “boolean”
}
},
“type”: “object”
},
“fork_management”: {
“additionalProperties”: false,
“properties”: {
“network_id”: {
“description”: “Identification of the network in case of hard forks.”,
“type”: “string”
}
},
“type”: “object”
},
“http”: {
“additionalProperties”: false,
“properties”: {
“cors”: {
“additionalProperties”: false,
“description”: “Section for CORS headers configuration.”,
“properties”: {
“allow_domains”: {
“default”: [
"
],
“description”: "List of domains that can access resources. Use '
’ to allow all domains.”,
“items”: {
“example”: “https://example.com”,
“type”: “string”
},
“minItems”: 1,
“type”: “array”
},
“allow_headers”: {
“default”: [
"
],
“description”: "List of allowed headers to be used with requests (to be set in access-control-request-headers header in the response). Use '
’ or do not set at all to allow all headers.”,
“items”: {
“example”: “Content-Type”,
“type”: “string”
},
“minItems”: 1,
“type”: “array”
},
“allow_methods”: {
“default”: [
“DELETE”,
“GET”,
“HEAD”,
“OPTIONS”,
“PATCH”,
“POST”,
“PUT”
],
“description”: “List of allowed methods allowed to be used when accessing resources (to be set in access-control-allow-methods header in the response).”,
“items”: {
“example”: “GET”,
“type”: “string”
},
“minItems”: 1,
“type”: “array”
},
“max_age”: {
“default”: 1800,
“description”: “Indicates for how many seconds the results of a preflight request can be cached (to be set in access-control-max-age header in the response).”,
“type”: “integer”
}
},
“type”: “object”
},
“debug”: {
“description”: “Whether to enable the debug endpoints”,
“type”: “boolean”
},
“endpoints”: {
“chain”: {
“description”: “Chain state inspection endpoints”,
“type”: “boolean”
},
“debug”: {
“description”: “Debug endpoints”,
“type”: “boolean”
},
“dev”: {
“description”: “Development only API - for validation of client implementations. Should not be used in real life scenrios”,
“type”: “boolean”
},
“gossip”: {
“description”: “Gossip protocol API”,
“type”: “boolean”
},
“name_service”: {
“description”: “Name resolution API”,
“type”: “boolean”
},
“node_operator”: {
“description”: “Node operator endpoints”,
“type”: “boolean”
},
“obsolete”: {
“description”: “Old endpoints that will be removed”,
“type”: “boolean”
},
“transactions”: {
“description”: “Transactions insection endpoints”,
“type”: “boolean”
}
},
“external”: {
“additionalProperties”: false,
“properties”: {
“acceptors”: {
“default”: 10,
“description”: “Number of acceptors in external pool”,
“type”: “integer”
},
“connect_timeout”: {
“description”: “HTTP Request connect timeout.”,
“type”: “integer”
},
“listen_address”: {
“description”: “Listen address for external interface. This should be publicly accessible”,
“example”: “0.0.0.0”,
“type”: “string”
},
“port”: {
“description”: “Listen port for external HTTP interface.”,
“type”: “integer”
},
“request_timeout”: {
“description”: “HTTP Request timeout.”,
“type”: “integer”
}
},
“type”: “object”
},
“internal”: {
“additionalProperties”: false,
“properties”: {
“acceptors”: {
“default”: 10,
“description”: “Number of acceptors in internal pool”,
“type”: “integer”
},
“listen_address”: {
“description”: “Listen address for internal interface. This should not be publicly accessible”,
“example”: “127.0.0.1”,
“type”: “string”
},
“port”: {
“description”: “Listen port for internal HTTP interface.”,
“type”: “integer”
}
},
“type”: “object”
}
},
“type”: “object”
},
“keys”: {
“additionalProperties”: false,
“properties”: {
“dir”: {
“description”: “Location (directory) of the public/private key pair(s)”,
“type”: “string”
},
“peer_password”: {
“description”: “Password used to encrypt the peer key-pair files”,
“type”: “string”
}
},
“type”: “object”
},
“load_levels”: {
“additionalProperties”: false,
“description”: “Overload sampler configurations. These monitor potential pain points in the system for indications of overload.”,
“properties”: {
“mempool”: {
“additionalProperties”: false,
“properties”: {
“size”: {
ref": "#/definitions/key_value_pattern", "default": "1000:1,2000:2,3000:3,4000:4", "description": "Number of transactions in the mempool", "type": "string" } }, "type": "object" } }, "type": "object" }, "logging": { "additionalProperties": false, "properties": { "hwm": { "description": "Controls the overload protection in the logs. Default=50.", "minimum": 50, "type": "integer" }, "level": { "default": "debug", "description": "Sets the level of logging in the epoch, mining and cuckoo logs.", "enum": [ "debug", "info", "warning", "error", "none" ], "type": "string" } }, "type": "object" }, "mempool": { "additionalProperties": false, "properties": { "invalid_tx_ttl": { "description": "Number of blocks before invalid (TTL or low nonce) TXs are garbage collected", "type": "integer" }, "nonce_baseline": { "description": "Maximum nonce accepted when pubkey is not present in state", "type": "integer" }, "nonce_offset": { "description": "Maximum nonce offset accepted", "type": "integer" }, "sync_interval": { "description": "Interval between mempool (re-)synchronization (in ms)", "type": "integer" }, "tx_ttl": { "description": "Number of blocks before inactive TXs are garbage collected", "type": "integer" } }, "type": "object" }, "metrics": { "additionalProperties": false, "properties": { "host": { "description": "Hostname to use when reporting to the statsd daemon", "type": "string" }, "port": { "description": "Port number of the (typically) statsd daemon.", "minimum": 0, "type": "integer" }, "reconnect_interval": { "description": "How often (in ms) to try reconnecting to the daemon", "minimum": 0, "type": "integer" }, "rules": { "description": "Filter rules guiding logging/sending of metrics. The provided search patterns are applied to existing metrics, and the related 'actions' control whether to 'log' the metric data to disk, 'send' it to the cloud, or neither. The default is to do both, i.e. 'log,send' for all 'ae.epoch.**' metrics.", "items": { "additionalProperties": false, "properties": { "actions": { "description": "What to do with matching metrics.", "pattern": "^((none)|(((log)|(send))(\\,((log)|(send))){0,1}))”,
“type”: “string”
},
“datapoints”: {
“description”: “Specific datapoints: ‘default’, or names, comma-separated”,
“pattern”: “^[a-zA-Z0-9]+(\,[a-zA-Z0-9]+)", "type": "string" }, "name": { "description": "Name pattern for metric (incl wildcards)", "example": "ae.epoch.aecore.**", "pattern": "^([a-zA-Z0-9\\-_]+|\\*{1,2})(\\.([a-zA-Z0-9\\-_]+|\\*{1,2}))*",
“type”: “string”
},
“type”: {
“description”: “type of metric”,
“pattern”: "^(\
|[a-zA-Z])", "type": "string" } }, "type": "object" }, "type": "array" } }, "type": "object" }, "mining": { "additionalProperties": false, "properties": { "attempt_timeout": { "description": "Maximum time (milliseconds) for each attempt to mine a block with a specific nonce.", "type": "integer" }, "autostart": { "description": "If true, the node will start mining automatically.", "type": "boolean" }, "beneficiary": { "description": "Public key of beneficiary account that will receive fees from mining on a node.", "example": "ak_DummyPubKeyDoNotEverUse999999999999999999999999999", "pattern": "^ak_[1-9A-HJ-NP-Za-km-z]*",
“type”: “string”
},
“beneficiary_reward_delay”: {
“default”: 180,
“description”: “Delay (in key blocks / generations) for getting mining rewards. Used in governance.”,
“minimum”: 2,
“type”: “integer”
},
“cuckoo”: {
“additionalProperties”: false,
“properties”: {
“miner”: {
“additionalProperties”: false,
“properties”: {
“edge_bits”: {
“default”: 29,
“description”: “Number of bits used for representing an edge in the Cuckoo Cycle problem. It affects both PoW generation (mining) and verification. WARNING: Changing this makes the node incompatible with the chain of other nodes in the network, do not change from the default unless you know what you are doing.”,
“type”: “integer”
},
“executable”: {
“default”: “mean29-generic”,
“description”: “Executable binary of the miner. Options are: "mean29-generic" (memory-intensive), "mean29-avx2" (memory-intensive, benefits from faster CPU supporting AVX2 instructions), "lean29-generic" (CPU-intensive, useful if memory-constrained), "lean29-avx2" (CPU-intensive, useful if memory-constrained, benefits from faster CPU supporting AVX2 instructions).”,
“type”: “string”
},
“extra_args”: {
“default”: “-t 1”,
“description”: “Extra arguments to pass to the miner executable binary. The safest choice is specifying no arguments i.e. empty string.”,
“type”: “string”
},
“hex_encoded_header”: {
“default”: false,
“description”: “Hexadecimal encode the header argument that is send to the miner executable. CUDA executables expect hex encoded header.”,
“type”: “boolean”
},
“instances”: {
“default”: 1,
“description”: “Miner instances in case of Multi-GPU mining”,
“type”: “integer”
},
“nice”: {
“description”: “Miner process priority (niceness) in a UNIX fashion. Higher nice means lower priority. Keep it unset to inherit parent process priority.”,
“type”: “integer”
}
},
“required”: [
“executable”,
“extra_args”,
“edge_bits”
],
“type”: “object”
}
},
“type”: “object”
},
“expected_mine_rate”: {
“default”: 300000,
“description”: “Expected mine rate (milliseconds) between blocks. Used in governance.”,
“minimum”: 1,
“type”: “integer”
},
“micro_block_cycle”: {
“default”: 3000,
“description”: “Expected rate (milliseconds) between micro-blocks. Used in governance.”,
“minimum”: 1,
“type”: “integer”
}
},
“required”: [
“beneficiary”
],
“type”: “object”
},
“peers”: {
“description”: “Pre-configured addresses of epoch nodes to contact. If not set TestNet seed peers will be used.”,
“items”: {
“description”: “Aeternity Node address”,
“example”: “aenode://[email protected]:3015”,
“pattern”: "^aenode://pp_[a-zA-Z0-9]+@[^:\."!#%^&*()',/]+(\\.[^:\\.\"!#%^&
()',/]+):[0-9]+/$”,
“type”: “string”
},
“type”: “array”
},
“regulators”: {
“additionalProperties”: false,
“description”: “Queues regulating the load in an epoch node. Each queue may have a combination of ‘rate’, ‘counter’, ‘max_size’ and ‘max_time’ parameters. Set a parameter to 0 if you want it to have no effect.”,
“properties”: {
“http_read”: {
“additionalProperties”: false,
“description”: “HTTP read requests.”,
“properties”: {
“counter”: {
“default”: 5,
“type”: “integer”
},
“max_size”: {
“default”: 100,
“type”: “integer”
},
“max_time”: {
“default”: 0,
“type”: “integer”
},
“rate”: {
“default”: 0,
“type”: “integer”
}
},
“type”: “object”
},
“http_update”: {
“additionalProperties”: false,
“description”: “HTTP update requests.”,
“properties”: {
“counter”: {
“default”: 5,
“type”: “integer”
},
“max_size”: {
“default”: 50,
“type”: “integer”
},
“max_time”: {
“default”: 0,
“type”: “integer”
},
“rate”: {
“default”: 0,
“type”: “integer”
}
},
“type”: “object”
},
“sc_ws_handlers”: {
“additionalProperties”: false,
“description”: “State channel websocket handlers.”,
“properties”: {
“counter”: {
“default”: 10,
“type”: “integer”
},
“max_size”: {
“default”: 5,
“type”: “integer”
},
“max_time”: {
“default”: 0,
“type”: “integer”
},
“rate”: {
“default”: 0,
“type”: “integer”
}
},
“type”: “object”
},
“sync_gossip”: {
“additionalProperties”: false,
“properties”: {
“counter”: {
“default”: 5,
“type”: “integer”
},
“max_size”: {
“default”: 0,
“type”: “integer”
},
“max_time”: {
“default”: 0,
“type”: “integer”
},
“rate”: {
“default”: 0,
“type”: “integer”
}
},
“type”: “object”
},
“sync_ping”: {
“additionalProperties”: false,
“description”: “sync node pinger worker pool.”,
“properties”: {
“counter”: {
“default”: 3,
“type”: “integer”
},
“max_size”: {
“default”: 0,
“type”: “integer”
},
“max_time”: {
“default”: 0,
“type”: “integer”
},
“rate”: {
“default”: 0,
“type”: “integer”
}
},
“type”: “object”
},
“sync_tasks”: {
“additionalProperties”: false,
“properties”: {
“counter”: {
“default”: 10,
“type”: “integer”
},
“max_size”: {
“default”: 0,
“type”: “integer”
},
“max_time”: {
“default”: 0,
“type”: “integer”
},
“rate”: {
“default”: 0,
“type”: “integer”
}
},
“type”: “object”
},
“tx_pool_push”: {
“additionalProperties”: false,
“description”: “mempool updates.”,
“properties”: {
“counter”: {
“default”: 5,
“type”: “integer”
},
“counter_modifiers”: {
“$ref”: “#/definitions/key_value_pattern”,
“default”: “mempool.size: 15”,
“type”: “string”
},
“max_size”: {
“default”: 5000,
“type”: “integer”
},
“max_time”: {
“default”: 0,
“type”: “integer”
},
“rate”: {
“default”: 0,
“type”: “integer”
},
“rate_modifiers”: {
“$ref”: “#/definitions/key_value_pattern”,
“default”: “mempool.size: 10”,
“type”: “string”
}
},
“type”: “object”
},
“ws_handlers”: {
“additionalProperties”: false,
“description”: “websocket handlers.”,
“properties”: {
“counter”: {
“default”: 10,
“type”: “integer”
},
“max_size”: {
“default”: 5,
“type”: “integer”
},
“max_time”: {
“default”: 0,
“type”: “integer”
},
“rate”: {
“default”: 0,
“type”: “integer”
}
},
“type”: “object”
}
},
“type”: “object”
},
“sync”: {
“additionalProperties”: false,
“properties”: {
“acceptors”: {
“default”: 10,
“description”: “Number of acceptors in listening pool”,
“type”: “integer”
},
“close_timeout”: {
“default”: 3000,
“description”: “Maximum time for the peer to close a connection cleanly”,
“type”: “integer”
},
“connect_timeout”: {
“default”: 1000,
“description”: “Connection timeout in miliseconds”,
“type”: “integer”
},
“external_port”: {
“description”: “Listen port for external sync connections.”,
“type”: “integer”
},
“first_ping_timeout”: {
“default”: 30000,
“description”: “Maximum time for receiving a ping in miliseconds”,
“type”: “integer”
},
“gossip_allowed_height_from_top”: {
“description”: “Allowed height difference from current top for incoming blocks (via gossip)”,
“type”: “integer”
},
“listen_address”: {
“description”: “Listen address for external interface. This should be publicly accessible”,
“example”: “0.0.0.0”,
“type”: “string”
},
“max_gossip”: {
“default”: 10,
“description”: “Maximum number of peers to gossip blocks and transactions to”,
“minimum”: 0,
“type”: “integer”
},
“max_inbound”: {
“default”: 100,
“description”: “Maximum number of inbound connections after which inbound connections are temporary (only used for a single ping)”,
“type”: “integer”
},
“max_inbound_hard”: {
“default”: 1000,
“description”: “Maximum number of inbound connections”,
“type”: “integer”
},
“max_outbound”: {
“default”: 10,
“description”: “Maximum number of outbound connections”,
“type”: “integer”
},
“noise_hs_timeout”: {
“default”: 5000,
“description”: “Maximum time for noise handshake in miliseconds”,
“type”: “integer”
},
“ping_interval”: {
“description”: “Interval between pings (in ms)”,
“type”: “integer”
},
“port”: {
“description”: “Port used for (incoming) sync connections, must be reachable from the public facing IP”,
“type”: “integer”
},
“resolver_backoff_times”: {
“default”: [
5000,
15000,
30000,
60000,
120000,
300000,
600000
],
“description”: “Waiting time intervals (milliseconds) before each retry at resolving the host name of peers (both trusted and untrusted). Retries further to the length of the array reuse the last item of the array.”,
“items”: {
“example”: 5000,
“minimum”: 1,
“type”: “integer”
},
“minItems”: 1,
“type”: “array”
},
“resolver_max_retries”: {
“default”: 7,
“description”: “Maximum number of retries at resolving the host name of untrusted peers.”,
“minimum”: 0,
“type”: “integer”
},
“single_outbound_per_group”: {
“default”: true,
“description”: “If the extra outbound connections should be to nodes from different address groups (IP netmask /16)”,
“type”: “boolean”
}
},
“type”: “object”
},
“websocket”: {
“additionalProperties”: false,
“properties”: {
“channel”: {
“additionalProperties”: false,
“properties”: {
“acceptors”: {
“default”: 10,
“description”: “Number of acceptors in pool”,
“type”: “integer”
},
“listen_address”: {
“default”: “127.0.0.1”,
“description”: “Listen address for channels websocket interface.”,
“example”: “0.0.0.0”,
“type”: “string”
},
“port”: {
“description”: “Listen port for channels websocket interface.”,
“type”: “integer”
}
},
“type”: “object”
}
},
“type”: “object”
}
},
“type”: “object”
}
Reason : No extra properties allowed
Configuration error (validation_failed)

I think your epoch.yaml file is not correctly indented (i.e. everything is written at the beginning of a line) - yaml-format is layout sensitive so for example the mining part should look like below. See aeternity/configuration.md at master · aeternity/aeternity · GitHub for more examples.

sync:
  port: 3015

mining:
  cuckoo:
     miner:
      instances: 2
      executable: cuda29
      extra_args: ""
      edge_bits: 29

...

Let me try and validate it looking at the examples mentioned. If I have any issues I will let you know.

Please find my epoch.yaml file and and let me know I am running only one GPU

I am getting following error while validating