Skip to content

Commit f43297b

Browse files
committed
Merge remote-tracking branch 'origin/master' into remove_shutdown
2 parents 3c3d587 + 1e116a5 commit f43297b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+2082
-1682
lines changed

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1640,7 +1640,7 @@ jobs:
16401640
set +x
16411641
export AWS_ACCESS_KEY_ID=${CIRCLECI_AWS_ACCESS_KEY_FOR_DOCKER_BUILDER_V1}
16421642
export AWS_SECRET_ACCESS_KEY=${CIRCLECI_AWS_SECRET_KEY_FOR_DOCKER_BUILDER_V1}
1643-
eval $(aws ecr get-login --no-include-email)
1643+
eval $(aws ecr get-login --no-include-email --region us-east-1)
16441644
set -x
16451645
docker push 308535385114.dkr.ecr.us-east-1.amazonaws.com/gc/ecr
16461646
ecr_gc_job:

.circleci/ecr_gc_docker/gc.py

Lines changed: 69 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,60 @@
77
import sys
88

99

10+
def save_to_s3(project, data):
11+
table_content = ""
12+
client = boto3.client("s3")
13+
for repo, tag, window, age, pushed in data:
14+
table_content += f"<tr><td>{repo}</td><td>{tag}</td><td>{window}</td><td>{age}</td><td>{pushed}</td></tr>"
15+
html_body = f"""
16+
<html>
17+
<head>
18+
<link rel="stylesheet"
19+
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
20+
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
21+
crossorigin="anonymous">
22+
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.20/css/jquery.dataTables.css">
23+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
24+
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.js"></script>
25+
<title>{project} nightly and permanent docker image info</title>
26+
</head>
27+
<body>
28+
<table class="table table-striped table-hover" id="docker">
29+
<thead class="thead-dark">
30+
<tr>
31+
<th scope="col">repo</th>
32+
<th scope="col">tag</th>
33+
<th scope="col">keep window</th>
34+
<th scope="col">age</th>
35+
<th scope="col">pushed at</th>
36+
</tr>
37+
</thead>
38+
<tbody>
39+
{table_content}
40+
</tbody>
41+
</table>
42+
</body>
43+
<script>
44+
$(document).ready( function () {{
45+
$('#docker').DataTable({{paging: false}});
46+
}} );
47+
</script>
48+
</html>
49+
"""
50+
51+
# for pytorch, file can be found at
52+
# http://ossci-docker.s3-website.us-east-1.amazonaws.com/pytorch.html
53+
# and later one we can config docker.pytorch.org to point to the location
54+
55+
client.put_object(
56+
Bucket="ossci-docker",
57+
ACL="public-read",
58+
Key=f"{project}.html",
59+
Body=html_body,
60+
ContentType="text/html",
61+
)
62+
63+
1064
def repos(client):
1165
paginator = client.get_paginator("describe_repositories")
1266
pages = paginator.paginate(registryId="308535385114")
@@ -89,29 +143,38 @@ def chunks(chunkable, n):
89143
yield chunkable[i : i + n]
90144

91145

146+
stable_window_tags = []
92147
for repo in repos(client):
93148
repositoryName = repo["repositoryName"]
94149
if not repositoryName.startswith(args.filter_prefix):
95150
continue
96151

97152
# Keep list of image digests to delete for this repository
98153
digest_to_delete = []
99-
100154
print(repositoryName)
155+
101156
for image in images(client, repo):
102157
tags = image.get("imageTags")
103158
if not isinstance(tags, (list,)) or len(tags) == 0:
104159
continue
105160

106161
tag = tags[0]
162+
created = image["imagePushedAt"]
163+
age = now - created
107164
# new images build on circle ci use workflow ID as tag, which has 4 "-"
108-
if tag.isdigit() or tag.count("-") == 4:
165+
if tag.isdigit() or tag.count("-") == 4 or tag in ignore_tags:
109166
window = stable_window
167+
if tag in ignore_tags:
168+
stable_window_tags.append((repositoryName, tag, "", age, created))
169+
elif age < window:
170+
stable_window_tags.append((repositoryName, tag, window, age, created))
110171
else:
111172
window = unstable_window
112173

113-
created = image["imagePushedAt"].replace(tzinfo=pytz.UTC)
114-
age = now - created
174+
print(
175+
f"Debug: for tag: {tag}, keep window is {window}, age is {age}, pushed at {image['imagePushedAt']}"
176+
)
177+
115178
if tag in ignore_tags:
116179
print("Ignoring tag {} (age: {})".format(tag, age))
117180
continue
@@ -135,3 +198,5 @@ def chunks(chunkable, n):
135198
repositoryName=repositoryName,
136199
imageIds=[{"imageDigest": digest} for digest in c],
137200
)
201+
202+
save_to_s3(args.filter_prefix, stable_window_tags)

.circleci/verbatim-sources/docker_jobs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
set +x
3434
export AWS_ACCESS_KEY_ID=${CIRCLECI_AWS_ACCESS_KEY_FOR_DOCKER_BUILDER_V1}
3535
export AWS_SECRET_ACCESS_KEY=${CIRCLECI_AWS_SECRET_KEY_FOR_DOCKER_BUILDER_V1}
36-
eval $(aws ecr get-login --no-include-email)
36+
eval $(aws ecr get-login --no-include-email --region us-east-1)
3737
set -x
3838
docker push 308535385114.dkr.ecr.us-east-1.amazonaws.com/gc/ecr
3939
ecr_gc_job:

aten/src/ATen/core/jit_type.h

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1435,8 +1435,8 @@ struct CAFFE2_API ClassType : public NamedType {
14351435

14361436
const std::vector<Function*>& methods() const;
14371437

1438-
TypePtr getAttribute(const std::string& name) const {
1439-
AT_ASSERT(attributeNames_.size() == attributeTypes_.size());
1438+
TypePtr findAttribute(const std::string& name) const {
1439+
TORCH_INTERNAL_ASSERT(attributeNames_.size() == attributeTypes_.size());
14401440
size_t pos = 0;
14411441
for (const auto& attr : attributeNames_) {
14421442
if (name == attr) {
@@ -1451,6 +1451,17 @@ struct CAFFE2_API ClassType : public NamedType {
14511451
return attributeTypes_[pos];
14521452
}
14531453

1454+
TypePtr getAttribute(const std::string& name) const {
1455+
auto type = findAttribute(name);
1456+
TORCH_CHECK(
1457+
type,
1458+
python_str(),
1459+
" does not have an attribute with name '",
1460+
name,
1461+
"'");
1462+
return type;
1463+
}
1464+
14541465
size_t numAttributes() const {
14551466
AT_ASSERT(attributeNames_.size() == attributeTypes_.size());
14561467
return attributeNames_.size();
@@ -1491,7 +1502,7 @@ struct CAFFE2_API ClassType : public NamedType {
14911502
TORCH_CHECK(
14921503
false,
14931504
python_str(),
1494-
" does not have a field with the name '",
1505+
" does not have an attribute with name '",
14951506
name,
14961507
"'");
14971508
}

aten/src/ATen/native/Activation.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ DEFINE_DISPATCH(hardtanh_backward_stub);
2020
DEFINE_DISPATCH(hardshrink_stub);
2121
DEFINE_DISPATCH(softshrink_stub);
2222
DEFINE_DISPATCH(shrink_backward_stub);
23+
DEFINE_DISPATCH(leaky_relu_stub);
24+
DEFINE_DISPATCH(leaky_relu_backward_stub);
2325

2426
Tensor hardtanh(const Tensor& self, Scalar min, Scalar max) {
2527
return at::clamp(self, min, max);
@@ -475,6 +477,50 @@ Tensor gelu_backward_cpu(const Tensor& grad, const Tensor& self) {
475477
return dX;
476478
}
477479

480+
Tensor& leaky_relu_out(
481+
Tensor& result,
482+
const Tensor& self,
483+
Scalar negval) {
484+
auto iter = TensorIterator::unary_op(result, self);
485+
leaky_relu_stub(iter.device_type(), iter, negval);
486+
return result;
487+
}
488+
489+
Tensor leaky_relu(
490+
const Tensor& self,
491+
Scalar negval) {
492+
Tensor result;
493+
auto iter = TensorIterator::unary_op(result, self);
494+
leaky_relu_stub(iter.device_type(), iter, negval);
495+
return iter.output();
496+
}
497+
498+
Tensor & leaky_relu_(
499+
Tensor & self,
500+
Scalar neg_val) {
501+
return at::leaky_relu_out(self, self, neg_val);
502+
}
503+
504+
Tensor& leaky_relu_backward_out(
505+
Tensor& grad_input,
506+
const Tensor& grad_output,
507+
const Tensor& input,
508+
Scalar negval) {
509+
auto iter = TensorIterator::binary_op(grad_input, input, grad_output);
510+
leaky_relu_backward_stub(iter.device_type(), iter, negval);
511+
return grad_input;
512+
}
513+
514+
Tensor leaky_relu_backward(
515+
const Tensor& grad_output,
516+
const Tensor& input,
517+
Scalar negval) {
518+
Tensor result;
519+
auto iter = TensorIterator::binary_op(result, input, grad_output);
520+
leaky_relu_backward_stub(iter.device_type(), iter, negval);
521+
return iter.output();
522+
}
523+
478524
DEFINE_DISPATCH(GeluKernel);
479525
DEFINE_DISPATCH(GeluBackwardKernel);
480526

aten/src/ATen/native/Activation.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ using hardtanh_backward_fn = void (*)(TensorIterator&, Scalar, Scalar);
1717
using shrink_fn = void (*)(TensorIterator&, Scalar);
1818
using shrink_backward_fn = void (*)(TensorIterator&, Scalar);
1919
using elu_fn = void (*)(TensorIterator&, Scalar, Scalar, Scalar);
20+
using leaky_relu_fn = void (*)(TensorIterator&, Scalar);
21+
using leaky_relu_backward_fn = void (*)(TensorIterator&, Scalar);
2022

2123
DECLARE_DISPATCH(elu_fn, elu_stub);
2224
DECLARE_DISPATCH(elu_fn, elu_backward_stub);
@@ -27,6 +29,8 @@ DECLARE_DISPATCH(hardtanh_backward_fn, hardtanh_backward_stub);
2729
DECLARE_DISPATCH(shrink_fn, hardshrink_stub);
2830
DECLARE_DISPATCH(shrink_fn, softshrink_stub);
2931
DECLARE_DISPATCH(shrink_backward_fn, shrink_backward_stub);
32+
DECLARE_DISPATCH(leaky_relu_fn, leaky_relu_stub);
33+
DECLARE_DISPATCH(leaky_relu_backward_fn, leaky_relu_backward_stub);
3034

3135
} // namespace native
3236

aten/src/ATen/native/Loss.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,46 @@ Tensor poisson_nll_loss(const Tensor& input, const Tensor& target, const bool lo
159159
return apply_loss_reduction(loss, reduction);
160160
}
161161

162+
Tensor& soft_margin_loss_backward_out(Tensor& grad_input, const Tensor& grad_output, const Tensor& input, const Tensor& target, int64_t reduction) {
163+
auto norm = reduction == Reduction::Mean ? 1. / input.numel() : 1.;
164+
auto z = at::exp(-target * input);
165+
// inplace version of: grad_input = -norm * target * z / (1. + z) * grad_output;
166+
at::mul_out(grad_input, target, z).mul_(-norm);
167+
z.add_(1);
168+
grad_input.div_(z).mul_(grad_output);
169+
return grad_input;
170+
}
171+
172+
Tensor soft_margin_loss_backward(const Tensor& grad_output, const Tensor& input, const Tensor& target, int64_t reduction) {
173+
auto grad_input = at::empty({0}, input.options());
174+
at::soft_margin_loss_backward_out(grad_input, grad_output, input, target, reduction);
175+
return grad_input;
176+
}
177+
178+
Tensor& soft_margin_loss_out(
179+
Tensor& output,
180+
const Tensor& input,
181+
const Tensor& target,
182+
int64_t reduction) {
183+
// compute inplace variant of: output = at::log(1. + at::exp(-input * target));
184+
at::neg_out(output, input).mul_(target).exp_().add_(1.).log_();
185+
if (reduction != Reduction::None) {
186+
auto tmp = apply_loss_reduction(output, reduction);
187+
output.resize_({});
188+
output.copy_(tmp);
189+
}
190+
return output;
191+
}
192+
193+
Tensor soft_margin_loss(
194+
const Tensor& input,
195+
const Tensor& target,
196+
int64_t reduction) {
197+
auto output = at::empty({0}, input.options());
198+
at::soft_margin_loss_out(output, input, target, reduction);
199+
return output;
200+
}
201+
162202
Tensor smooth_l1_loss(const Tensor& input, const Tensor& target, const int64_t reduction) {
163203
Tensor loss;
164204
auto iter = TensorIterator::binary_op(loss, input, target);

aten/src/ATen/native/cpu/Activation.cpp

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ void hardshrink_kernel(TensorIterator& iter, Scalar lambd) {
235235
}
236236

237237
void softshrink_kernel(TensorIterator& iter, Scalar lambd) {
238-
AT_DISPATCH_FLOATING_TYPES_AND_HALF(iter.dtype(), "softshrink_cuda", [&]() {
238+
AT_DISPATCH_FLOATING_TYPES_AND_HALF(iter.dtype(), "softshrink_cpu", [&]() {
239239
auto lambd_val = lambd.to<scalar_t>();
240240
cpu_kernel(iter, [=](scalar_t a) -> scalar_t {
241241
return a > lambd_val ? a - lambd_val : (a < -lambd_val ? a + lambd_val : scalar_t(0));
@@ -272,6 +272,45 @@ void hardtanh_backward_kernel(TensorIterator& iter, Scalar min, Scalar max) {
272272
});
273273
});
274274
}
275+
276+
static void leaky_relu_kernel(TensorIterator& iter, Scalar negval_) {
277+
AT_DISPATCH_FLOATING_TYPES(iter.dtype(), "leaky_relu_cpu", [&] {
278+
using Vec = Vec256<scalar_t>;
279+
auto zero_vec = Vec((scalar_t)(0));
280+
auto one_vec = Vec((scalar_t)(1));
281+
scalar_t negval = negval_.to<scalar_t>();
282+
Vec negval_v = Vec(negval);
283+
cpu_kernel_vec(
284+
iter,
285+
[&](scalar_t a) -> scalar_t {
286+
return a > scalar_t(0) ? a : a * negval;
287+
},
288+
[&](Vec a) -> Vec {
289+
auto r = Vec::blendv(negval_v, one_vec, a > zero_vec);
290+
return a * r;
291+
});
292+
});
293+
}
294+
295+
static void leaky_relu_backward_kernel(TensorIterator& iter, Scalar negval_) {
296+
AT_DISPATCH_FLOATING_TYPES(iter.dtype(), "leaky_relu_backward_cpu", [&] {
297+
using Vec = Vec256<scalar_t>;
298+
auto zero_vec = Vec((scalar_t)(0));
299+
auto one_vec = Vec((scalar_t)(1));
300+
scalar_t negval = negval_.to<scalar_t>();
301+
Vec negval_v = Vec(negval);
302+
cpu_kernel_vec(
303+
iter,
304+
[&](scalar_t a, scalar_t b) -> scalar_t {
305+
return a > scalar_t(0) ? b : b * negval;
306+
},
307+
[&](Vec a, Vec b) -> Vec {
308+
auto r = Vec::blendv(negval_v, one_vec, a > zero_vec);
309+
return b * r;
310+
});
311+
});
312+
}
313+
275314
} // namespace
276315

277316
REGISTER_DISPATCH(threshold_stub, &threshold_kernel);
@@ -283,6 +322,8 @@ REGISTER_DISPATCH(hardtanh_backward_stub, &hardtanh_backward_kernel);
283322
REGISTER_DISPATCH(hardshrink_stub, &hardshrink_kernel);
284323
REGISTER_DISPATCH(softshrink_stub, &softshrink_kernel);
285324
REGISTER_DISPATCH(shrink_backward_stub, &shrink_backward_kernel);
325+
REGISTER_DISPATCH(leaky_relu_stub, &leaky_relu_kernel);
326+
REGISTER_DISPATCH(leaky_relu_backward_stub, &leaky_relu_backward_kernel);
286327

287328
} // namespace native
288329
} // namespace at

aten/src/ATen/native/cuda/Activation.cu

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,24 @@ void GeluBackwardCUDAKernelImpl(TensorIterator& it) {
344344
});
345345
}
346346

347+
void leaky_relu_kernel(TensorIterator& iter, Scalar negval_) {
348+
AT_DISPATCH_FLOATING_TYPES_AND_HALF(iter.dtype(), "leaky_relu_cuda", [&]() {
349+
auto negval = negval_.to<scalar_t>();
350+
gpu_kernel(iter, [negval]GPU_LAMBDA(scalar_t a) -> scalar_t {
351+
return a > scalar_t(0) ? a : a * negval;
352+
});
353+
});
354+
}
355+
356+
void leaky_relu_backward_kernel(TensorIterator& iter, Scalar negval_) {
357+
AT_DISPATCH_FLOATING_TYPES_AND_HALF(iter.dtype(), "leaky_relu_backward_cuda", [&]() {
358+
auto negval = negval_.to<scalar_t>();
359+
gpu_kernel(iter, [negval]GPU_LAMBDA(scalar_t a, scalar_t b) -> scalar_t {
360+
return a > scalar_t(0) ? b : b * negval;
361+
});
362+
});
363+
}
364+
347365
} // namespace
348366

349367
Tensor gelu_cuda(const Tensor& self) {
@@ -398,5 +416,7 @@ REGISTER_DISPATCH(softshrink_stub, &softshrink_kernel);
398416
REGISTER_DISPATCH(shrink_backward_stub, &shrink_backward_kernel);
399417
REGISTER_DISPATCH(elu_stub, &elu_kernel);
400418
REGISTER_DISPATCH(elu_backward_stub, &elu_backward_kernel);
419+
REGISTER_DISPATCH(leaky_relu_stub, &leaky_relu_kernel);
420+
REGISTER_DISPATCH(leaky_relu_backward_stub, &leaky_relu_backward_kernel);
401421

402422
}} // namespace at::native

0 commit comments

Comments
 (0)