cnvrg 0.0.14254 → 0.0.14256
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/cnvrg/cli.rb +116 -19
- data/lib/cnvrg/experiment.rb +1 -2
- data/lib/cnvrg/version.rb +2 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e16a2aac3b10ceece9436b1d704e614bf03fbec0
|
4
|
+
data.tar.gz: fcdb72eb0cd3da08bef8b8baa84e15ae74137a0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71d7e5bfe772ff2265f84c25063323656e50e37c3357d531a9b0372ad3af05d4f6a3045f5d909d052f69dcc412957f3becddf83ec7d4acc5ff12693c29100108
|
7
|
+
data.tar.gz: 23cf4218ff64a183ca9da4c2e51c94c0cc0f3b17ebfd274c9663d286c03c6a1035b3d6eb5f2757ed5d6ad4624462a1a21fa30ec1e698de01ceefc2a100f801ae
|
data/lib/cnvrg/cli.rb
CHANGED
@@ -35,7 +35,6 @@ require 'thor'
|
|
35
35
|
require 'pathname'
|
36
36
|
require 'enumerator'
|
37
37
|
|
38
|
-
|
39
38
|
class Thor
|
40
39
|
module Base
|
41
40
|
def initialize(args = [], local_options = {}, config = {})
|
@@ -2194,6 +2193,8 @@ module Cnvrg
|
|
2194
2193
|
method_option :data, :type => :string, :aliases => ["-d", "--data"], :default => ""
|
2195
2194
|
method_option :data_commit, :type => :string, :aliases => ["-dc", "--data_commit"], :default => ""
|
2196
2195
|
method_option :ignore, :type => :string, :aliases => ["-i", "--ignore"], :desc => "ignore following files", :default => ""
|
2196
|
+
method_option :remote, :type => :boolean, :aliases => ["--remote"], :default => false
|
2197
|
+
method_option :gpu, :type => :boolean, :aliases => ["--gpu"], :default => false
|
2197
2198
|
def exec(*cmd)
|
2198
2199
|
|
2199
2200
|
log = []
|
@@ -2260,6 +2261,12 @@ module Cnvrg
|
|
2260
2261
|
exit(0)
|
2261
2262
|
end
|
2262
2263
|
end
|
2264
|
+
remote = options["remote"]
|
2265
|
+
if remote
|
2266
|
+
docker_id = `cat /etc/hostname`
|
2267
|
+
docker_id = docker_id.strip()
|
2268
|
+
end
|
2269
|
+
is_on_gpu = options["gpu"]
|
2263
2270
|
start_commit = @project.last_local_commit
|
2264
2271
|
cmd = cmd.join("\s")
|
2265
2272
|
|
@@ -2283,19 +2290,34 @@ module Cnvrg
|
|
2283
2290
|
begin
|
2284
2291
|
stdout.each do |line|
|
2285
2292
|
cur_time = Time.now
|
2286
|
-
|
2287
|
-
|
2288
|
-
|
2289
|
-
|
2293
|
+
if remote
|
2294
|
+
stats = usage_metrics_in_docker(docker_id)
|
2295
|
+
cpu = stats[0]
|
2296
|
+
memory = stats[1]
|
2297
|
+
else
|
2298
|
+
memory = memory_usage()
|
2299
|
+
cpu = cpu_usage()
|
2300
|
+
end
|
2301
|
+
|
2290
2302
|
memory_total << memory.to_f
|
2291
2303
|
cpu_total << cpu.to_f
|
2292
2304
|
real_time= Time.now-real
|
2293
2305
|
|
2294
|
-
cur_log = {time: cur_time,
|
2306
|
+
cur_log = { time: cur_time,
|
2295
2307
|
message: line,
|
2296
2308
|
type: "stdout",
|
2297
|
-
real: real_time
|
2298
|
-
|
2309
|
+
real: real_time,
|
2310
|
+
cpu: cpu,
|
2311
|
+
memory: memory
|
2312
|
+
}
|
2313
|
+
if is_on_gpu
|
2314
|
+
gpu_stats = gpu_util
|
2315
|
+
gpu_utilization = gpu_stats[0]
|
2316
|
+
gpu_memory_util = gpu_stats[1]
|
2317
|
+
cur_log.merge!(gpu_util:gpu_utilization,gpu_memory_util:gpu_memory_util)
|
2318
|
+
end
|
2319
|
+
|
2320
|
+
if print_log
|
2299
2321
|
puts cur_log
|
2300
2322
|
end
|
2301
2323
|
log << cur_log
|
@@ -2304,8 +2326,8 @@ module Cnvrg
|
|
2304
2326
|
if time_to_upload !=0
|
2305
2327
|
if time_to_upload <= Time.now - start_loop
|
2306
2328
|
#upload current log
|
2307
|
-
cpu_average = cpu_total.inject(0) { |sum, el| sum + el }.to_f / cpu_total.size
|
2308
|
-
memory_average = memory_total.inject(0) { |sum, el| sum + el }.to_f / memory_total.size
|
2329
|
+
# cpu_average = cpu_total.inject(0) { |sum, el| sum + el }.to_f / cpu_total.size
|
2330
|
+
# memory_average = memory_total.inject(0) { |sum, el| sum + el }.to_f / memory_total.size
|
2309
2331
|
|
2310
2332
|
@exp.upload_temp_log(log, cpu_average, memory_average)
|
2311
2333
|
log = []
|
@@ -2621,8 +2643,7 @@ module Cnvrg
|
|
2621
2643
|
method_option :data_commit, :type => :string, :aliases => ["--data_commit"], :default => ""
|
2622
2644
|
method_option :ignore, :type => :string, :aliases => ["-i", "--ignore"], :desc => "ignore following files", :default => ""
|
2623
2645
|
|
2624
|
-
def
|
2625
|
-
exec_remote(*cmd)
|
2646
|
+
def exec_remote(*cmd)
|
2626
2647
|
verify_logged_in(true)
|
2627
2648
|
log_start(__method__, args, options)
|
2628
2649
|
working_dir = is_cnvrg_dir
|
@@ -2661,10 +2682,15 @@ module Cnvrg
|
|
2661
2682
|
else
|
2662
2683
|
upload_output_option = "--upload_output=#{upload_output}"
|
2663
2684
|
end
|
2685
|
+
remote = "--remote=true"
|
2686
|
+
if !instance_type.nil? and instance_type.include? "gpu"
|
2687
|
+
remote= "#{remote} --gpu=true"
|
2688
|
+
end
|
2689
|
+
|
2664
2690
|
options_hash = Hash[options]
|
2665
2691
|
options_hash.except!("schedule", "machine_type", "image", "upload_output", "grid", "data", "data_commit", "local", "small", "medium", "large", "gpu", "gpuxl", "gpuxxl")
|
2666
2692
|
exec_options = options_hash.map { |x| "--#{x[0]}=#{x[1]}" }.flatten.join(" ")
|
2667
|
-
command = "#{exec_options} #{upload_output_option} #{cmd.flatten.join(" ")}"
|
2693
|
+
command = "#{exec_options} #{remote} #{upload_output_option} #{cmd.flatten.join(" ")}"
|
2668
2694
|
commit_to_run = options["commit"] || nil
|
2669
2695
|
if !schedule.nil? and !schedule.empty?
|
2670
2696
|
|
@@ -3853,6 +3879,7 @@ module Cnvrg
|
|
3853
3879
|
'8888/tcp' => {},
|
3854
3880
|
},
|
3855
3881
|
'HostConfig' => {
|
3882
|
+
'Binds'=> ["/var/run/docker.sock:/var/run/docker.sock","/usr/bin/docker:/usr/bin/docker" ],
|
3856
3883
|
'PortBindings' => {
|
3857
3884
|
'8888/tcp' => [
|
3858
3885
|
{'HostPort' => "#{port}", 'HostIp' => 'localhost'}
|
@@ -3877,6 +3904,7 @@ module Cnvrg
|
|
3877
3904
|
container.exec(command, tty: true)
|
3878
3905
|
say "#{container.id}:#{port}##{tensport}"
|
3879
3906
|
rescue => e
|
3907
|
+
puts e
|
3880
3908
|
if e.message.include? "is not running"
|
3881
3909
|
return config_remote(image_name, port-1, tensport-1)
|
3882
3910
|
end
|
@@ -3947,7 +3975,7 @@ module Cnvrg
|
|
3947
3975
|
# },
|
3948
3976
|
# }
|
3949
3977
|
|
3950
|
-
container_id = `nvidia-docker run -itd -p #{port}:8888 -p #{tensport}:6006 -w #{app_dir} -v /usr/bin/nvidia-smi:/usr/bin/nvidia-smi #{image_name}:latest #{cmd} `
|
3978
|
+
container_id = `nvidia-docker run -itd -p #{port}:8888 -p #{tensport}:6006 -w #{app_dir} -v /usr/bin/nvidia-smi:/usr/bin/nvidia-smi -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker #{image_name}:latest #{cmd} `
|
3951
3979
|
container_id = container_id.gsub("\n", "")
|
3952
3980
|
container = Docker::Container.get(container_id)
|
3953
3981
|
# container.start()
|
@@ -4445,11 +4473,10 @@ module Cnvrg
|
|
4445
4473
|
url = "https://cnvrg.io/api"
|
4446
4474
|
end
|
4447
4475
|
config = YAML.load_file(home_dir+"/.cnvrg/config.yml")
|
4448
|
-
|
4449
4476
|
compression_path = "#{home_dir}/.cnvrg/tmp"
|
4450
|
-
|
4451
|
-
|
4452
|
-
|
4477
|
+
if config and !config.nil? and !config.empty? and !config.to_h[:compression_path].nil?
|
4478
|
+
compression_path = config.to_h[:compression_path]
|
4479
|
+
end
|
4453
4480
|
config = {owner: owner, username: username, version_last_check: get_start_day(), api: url,compression_path:compression_path}
|
4454
4481
|
|
4455
4482
|
File.open(home_dir+"/.cnvrg/config.yml", "w+") { |f| f.write config.to_yaml }
|
@@ -4504,7 +4531,7 @@ module Cnvrg
|
|
4504
4531
|
|
4505
4532
|
def log_end(exit_status=0, error=nil)
|
4506
4533
|
begin
|
4507
|
-
if exit_status
|
4534
|
+
if exit_status != 0
|
4508
4535
|
$LOG.error exit_status: exit_status, error: error
|
4509
4536
|
else
|
4510
4537
|
$LOG.info exit_status: exit_status
|
@@ -4932,6 +4959,76 @@ module Cnvrg
|
|
4932
4959
|
def extarct_tar(file_path, dir_path)
|
4933
4960
|
`tar -xvf #{file_path} -C #{dir_path} > /dev/null 2>&1`
|
4934
4961
|
return $?.success?
|
4962
|
+
end
|
4963
|
+
def cpu_usage
|
4964
|
+
cpu_usage = 0.0
|
4965
|
+
begin
|
4966
|
+
cpu = `top b -n 2 -d 2 |grep %Cpu |tail -1 |awk '{print $2+$3}'`
|
4967
|
+
if !cpu.nil?
|
4968
|
+
cpu_usage = cpu.to_f
|
4969
|
+
end
|
4970
|
+
rescue
|
4971
|
+
cpu_usage = 0.0
|
4972
|
+
end
|
4973
|
+
|
4974
|
+
return cpu_usage
|
4975
|
+
end
|
4976
|
+
def memory_usage
|
4977
|
+
prec = 0.0
|
4978
|
+
begin
|
4979
|
+
used = `free -mt |grep Mem: |awk '{print $3}'`
|
4980
|
+
total = `free -mt |grep Mem: |awk '{print $2}'`
|
4981
|
+
|
4982
|
+
used_f = used.to_f if !used.nil?
|
4983
|
+
total_f = total.to_f if !total.nil?
|
4984
|
+
prec = (used_f / total_f)*100
|
4985
|
+
prec = prec.round(2)
|
4986
|
+
rescue
|
4987
|
+
prec = 0.0
|
4988
|
+
end
|
4989
|
+
return prec
|
4990
|
+
|
4991
|
+
|
4992
|
+
end
|
4993
|
+
def gpu_util
|
4994
|
+
gpu = [0.0, 0.0]
|
4995
|
+
begin
|
4996
|
+
gpu_stats = `nvidia-smi --query-gpu=utilization.gpu,utilization.memory --format=csv |tail -1`
|
4997
|
+
|
4998
|
+
if !gpu_stats.nil?
|
4999
|
+
gpu = gpu_stats.strip
|
5000
|
+
gpu = gpu_stats.gsub!("%","").split(",")
|
5001
|
+
gpu[0] = gpu[0].to_f
|
5002
|
+
gpu[1] = gpu[1].to_f
|
5003
|
+
return gpu
|
5004
|
+
end
|
5005
|
+
|
5006
|
+
rescue
|
5007
|
+
return gpu
|
5008
|
+
end
|
5009
|
+
|
5010
|
+
|
5011
|
+
end
|
5012
|
+
def usage_metrics_in_docker(docker_id)
|
5013
|
+
begin
|
5014
|
+
if docker_id.nil?
|
5015
|
+
docker_id = `cat /etc/hostname`
|
5016
|
+
end
|
5017
|
+
stats = `sudo docker stats #{docker_id} --no-stream |tail -1 | awk '{print $2,$8}'`
|
5018
|
+
if !stats.nil?
|
5019
|
+
conv = stats.gsub!("%","").split(" ")
|
5020
|
+
cpu = conv[0].to_f
|
5021
|
+
memory = conv[1].to_f
|
5022
|
+
return [cpu,memory]
|
5023
|
+
end
|
5024
|
+
|
5025
|
+
|
5026
|
+
rescue
|
5027
|
+
return [0.0,0.0]
|
5028
|
+
end
|
5029
|
+
|
5030
|
+
|
5031
|
+
|
4935
5032
|
end
|
4936
5033
|
|
4937
5034
|
def with_progress_bar
|
data/lib/cnvrg/experiment.rb
CHANGED
@@ -92,8 +92,7 @@ module Cnvrg
|
|
92
92
|
|
93
93
|
def upload_temp_log(temp_log, cpu_average, memory_average)
|
94
94
|
response = Cnvrg::API.request(@base_resource + "experiment/upload_temp_log", 'POST', {output: temp_log,
|
95
|
-
exp_slug: @slug
|
96
|
-
memory_average: memory_average})
|
95
|
+
exp_slug: @slug})
|
97
96
|
Cnvrg::CLI.is_response_success(response,false)
|
98
97
|
end
|
99
98
|
|
data/lib/cnvrg/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cnvrg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.14256
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yochay Ettun
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-07-
|
12
|
+
date: 2017-07-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -373,9 +373,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
373
373
|
version: '0'
|
374
374
|
requirements: []
|
375
375
|
rubyforge_project:
|
376
|
-
rubygems_version: 2.
|
376
|
+
rubygems_version: 2.6.12
|
377
377
|
signing_key:
|
378
378
|
specification_version: 4
|
379
379
|
summary: A CLI tool for interacting with cnvrg.io.
|
380
380
|
test_files: []
|
381
|
-
has_rdoc:
|