Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Provide file hashes in the URLs to avoid unnecessary file downloads (bandwidth saver) #1433

Merged
merged 15 commits into from
Sep 23, 2023
Merged

Conversation

matteius
Copy link
Contributor

@matteius matteius commented Jun 17, 2023

Supply sha256 query parameters using boto3 to avoid hundreds of extra Gigabytes of downloads each day during pipenv and poetry resolution lock cycles.

Fixes point 1 in pytorch/pytorch#76557
Fixes #1347

… Gigabytes of downloads each day during pipenv and poetry resolution lock cycles.
@facebook-github-bot
Copy link
Contributor

Hi @matteius!

Thank you for your pull request and welcome to our community.

Action Required

In order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you.

Process

In order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA.

Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with CLA signed. The tagging process may take up to 1 hour after signing. Please give it that time before contacting us about it.

If you have received this in error or have any questions, please contact us at cla@meta.com. Thanks!

@matteius
Copy link
Contributor Author

I just signed the Contributor License Agreement,

@matteius
Copy link
Contributor Author

@malfet Could I get this on your radar?

@matteius
Copy link
Contributor Author

matteius commented Jul 1, 2023

@seemethere or @atalman -- Could I get this PR on your radar?

@thejcannon
Copy link

thejcannon commented Jul 5, 2023

FWIW I don't think this completely fixes pytorch/pytorch#76557, just the first item in the list.

Item 2, I think, very much should still be tackled (and I'm willing to give it a shot). Both of those together I think would be sufficient.

Edit: I have a branch now that has support for 2, however would love to get in contact with someone from the infra team since backporting and checksums (and backporting checksums) make this even better

@thejcannon
Copy link

Also, if I look at the support on PyPI I see URLs like this:

<a href="https://files.pythonhosted.org/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl#sha256=58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f" data-requires-python=">=3.7" data-dist-info-metadata="sha256=7823e890e9db6f415138badf9744791290ef76e7ec6fd09a3789e8247fffe782" data-core-metadata="sha256=7823e890e9db6f415138badf9744791290ef76e7ec6fd09a3789e8247fffe782">requests-2.31.0-py3-none-any.whl</a>

which makes me think we should make these links look like those (specifically using # in the URL)

@matteius
Copy link
Contributor Author

matteius commented Jul 6, 2023

@thejcannon I was only tackling the first item on the list -- which is going to be mutually beneficial for pipenv. I am not that familiar with PEP 658 and that should be pursued in a separate PR. In the case of pipenv, this change alone should allow us to go from downloading all of the matching distributions to just the one relevant to the system (at least I think it will). Checking on the # in the URL now ..

@thejcannon
Copy link

Gotcha. I started on the other bullet points and have a branch.

Two questions for you:

  • I haven't used pipenv, can you help my understanding of why the hashes of wheels help? Is the assumption that the index could theoretically serve a different binary blob for a given package+version at some later point in time? Therefore without a hash pipenv (and others) re-download to be the most correct?
  • How did you test the S3 checksum grabbing? When I issue a similar command (aws s3api get-object-attributes ...) I get denied permissions 😞

@matteius
Copy link
Contributor Author

matteius commented Jul 7, 2023

can you help my understanding of why the hashes of wheels help?

@thejcannon Yes, the issue is consider this lock file entry for pytorch:

        "torch": {
            "hashes": [
                "sha256:4b4bf40d844fdcf9b7261e62aff9eede7c89c2b904343b3f9dc12393763779cb",
                "sha256:566cbfad47b25ef6b1023518982179439d8e53069f3d2341e8adcd1e4b2ef179",
                "sha256:588188a37e2f2c9bb8f807e0d49ac4d66b9ef23f4417233247c5d2f796c4f42d",
                "sha256:78ae2260ac1902c5a224fe1b7994072bbfa7ef8a1734d8697ca74249fa6391c5",
                "sha256:7c23faff945e98c6e242ce41a480e7fe48426140d5994ea3b9886c02145d58cf",
                "sha256:bbe445308a43960efeabc4f4a4b6c5d0db209ef5d5148672c750943d1ea42f54",
                "sha256:bcb611272d7aa5c2f7c1648b2227303a023b1de46aabccf1846a8aca1bfb5cd8",
                "sha256:ccbd72f39d76fb7e7db6513bcc8e4ee684348f9865bd8cddca6ce2dd07b3ccd0"
            ],
            "index": "downloadpytorch",
            "version": "==1.10.2+cu111"
        },

To generate this proper lock file entry the lock phase had to download every single wheel to get the hash value from the registry, but with the above change (assuming the AWS ACL is correct and I didn't make a mistake) it will have the hashes and scrape them from the html page instead.

The hashes are used during the install phase to verify that the package downloaded matches what was determined when the lock file was was locked or last updated. So you can see where if each of those wheels is ~1.5 GB that is ~12 GB of downloads that would be avoided during lock phase. The idea is that all hashes related to that version are included because the lock file is shared across system platforms so the install phase may use different package+hash based on the system but everything in that list was authorized.

How did you test the S3 checksum grabbing?

I didn't really, I don't have anything in AWS but am familiar with using it and boto3, and wrote that code just from reading how to get the hash in documentation, but its possible I could have made a mistake:
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/get_object_attributes.html

It says:

To use GetObjectAttributes, you must have READ access to the object.

@matteius
Copy link
Contributor Author

matteius commented Jul 7, 2023

Hmm, I guess those docs also say:

ChecksumSHA256 (string) –
The base64-encoded, 256-bit SHA-256 digest of the object. This will only be present if it was uploaded with the object.

That seems possibly troublesome.

@matteius
Copy link
Contributor Author

matteius commented Jul 7, 2023

image

Which links to:
https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html

image
https://aws.amazon.com/blogs/aws/new-additional-checksum-algorithms-for-amazon-s3/

It seems that:
1.) The bucket needs to be configured to use the sha-256 checksum (md5 is default)
2.) Historical files probably wouldn't get this by default without being "copied" after the setting is changed, possibly also explicitly specifying the sha-256 algorithm in the copy or put_object commands.

@thejcannon
Copy link

Ah ok your explanation makes things crystal clear now, thank you.


I also reached out to some folks at Meta to help me with the S3 side of PEP 658, we can also see if checksum enabling (including historical files) is something their willing to enable.

@thejcannon
Copy link

FYI @matteius

Copy link

@thejcannon thejcannon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I'm around I thought I'd review the code 😋

Exciting stuff!

Comment on lines 226 to 228
except NoCredentialsError:
print("No AWS credentials found")
return None

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not just let this propogate? Otherwise it'll just repeatedly print the error and generate a sub-optimal index.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My thinking was that the index page should still generate as it does now even if there is no hash available to provide. I should definitely remove the print statements. I am not sure what exceptions would be raised before the Checksum values get added to the objects.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Did this mean to get commented below? on https://github.com/pytorch/builder/pull/1433/files/b3799a8eb42b56118a4bc0658902875734888721#r1261472864? If not I'm not following the thread here. If the credentials aren't found we really can't know if there's a checksum or not)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I mean its the same code block in my mind -- I am just saying I don't know what exceptions we want to catch and handle for the case of the checksum isn't available yet -- maybe we don't care about NoCredentialsError but I think we need to handle something

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's safe to assume:

  • The runner has valid credentials to the object
  • The runner has the correct permissions to access the attributes
  • S3 is alive and well and will return good JSON.

Because otherwise if these assumptions aren't held, there's a chance the script generates an index.html without the checksums and we're back to square 1.

So I think the only thing to handle here is "this object has no checksum attribute".

Which means the code looks roughly like:

response = CLIENT.get_object_attributes(
    Bucket=BUCKET,
    Key=s3_key,
    ObjectAttributes=["Checksum"]
)
checksum = response.get("Checksum", {}).get("ChecksumSHA256", None)

without any try/except.

FWIW I tested your code against a work bucket and got TypeError: expected string or bytes-like object. Switching the argument for Bucket to the string bucket name then gives me a valid response.

So probably use BUCKET.name as well.


Here's some local testing...

>>> import boto3
>>> BUCKET=S3.Bucket("<bucketname>")
>>> CLIENT = boto3.client("s3")
>>> response = CLIENT.get_object_attributes(Bucket=BUCKET.name,Key="<object-without-checksum>",ObjectAttributes=['Checksum'])
>>> list(response)
['ResponseMetadata', 'LastModified', 'VersionId']
>>> response.get("Checksum", {}).get("ChecksumSHA256", None)
>>> response = CLIENT.get_object_attributes(Bucket=BUCKET.name,Key="<object-WITH-checksum>",ObjectAttributes=['Checksum'])
>>> list(response)
['ResponseMetadata', 'LastModified', 'Checksum']
>>> response.get("Checksum", {}).get("ChecksumSHA256", None)
'7Uc3AtM1Dlc4XiQ8A6NkQdV9JMU4liPtz7wOd+RRCTE='

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Resolved.

except NoCredentialsError:
print("No AWS credentials found")
return None
except Exception as e:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a wide exception. I think the try: block and relevant exceptions likely should be scoped to be explicit about what is expected to fail and what isn't.

Otherwise, a simple bug could manifest as an index not having hashes. When the alternative is an error with a stacktrace given to the user, and no index generated.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Resolved.

Comment on lines 217 to 224
s3_key = s3_key.replace("%2B", "+")
try:
response = CLIENT.get_object_attributes(
Bucket=BUCKET,
Key=s3_key,
ObjectAttributes=['Checksum']
)
checksum = response['Checksum']['ChecksumSHA256']

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there any way to leverage the call in from_S3 to also include this information?

If not, perhaps this should be done there so the returned objects already have the checksum attached and the downstream code can choose to use it or not?

That would isolate the S3 retrieval code to be in one logical place.

Copy link
Contributor Author

@matteius matteius Jul 13, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there any way to leverage the call in from_S3 to also include this information?

From what I can tell they are different clients/endpoints that serve different purposes.

If not, perhaps this should be done there so the returned objects already have the checksum attached and the downstream code can choose to use it or not?

From my perspective, the from_S3 appears to just be tracking a list of strings which is the object s3_key with List[str] so I am not sure it makes sense to tackle a larger refactor just to add all the additional calls to pre-lookup these checksums and store them in memory until their point of use.

That would isolate the S3 retrieval code to be in one logical place.

Isn't it already isolated to this one file manage.py where the clients are in scope for the whole file?

Maybe I am being dense and don't see the obvious way to accomplish this without spending a couple more hours on it, plus the more complexity I add, well I have no real way of testing it. Looking for any guidance on the right exceptions to catch or not catch above, but I think we need to catch something to cover the case that s3 isn't ready or able to provide the hashes.

Copy link

@thejcannon thejcannon Jul 13, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, so looks like you should be able to do this in from_s3 (which is ideal, because we'll want the checksums for metadata files in #1457 as well:

>>> import boto3
>>> BUCKET=S3.Bucket("<bucketname>")
>>> obj = next(iter(BUCKET.objects.filter(Prefix="<some prefix>")))
>>> response = obj.meta.client.head_object(Bucket=BUCKET.name, Key=obj.key, ChecksumMode="ENABLED")
>>> response["ChecksumSHA256"]
'7Uc3AtM1Dlc4XiQ8A6NkQdV9JMU4liPtz7wOd+RRCTE='

And then for an object without a checksum:

>>> response = obj.meta.client.head_object(Bucket=BUCKET.name, Key=obj.key, ChecksumMode="ENABLED")
>>> list(response)
['ResponseMetadata', 'AcceptRanges', 'LastModified', 'ContentLength', 'ETag', 'ContentType', 'ServerSideEncryption', 'Metadata']

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Resolved.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Build is failing with:

Unknown parameter in input: "ChecksumMode", must be one of: Bucket, IfMatch, IfModifiedSince, IfNoneMatch, IfUnmodifiedSince, Key, Range, VersionId, SSECustomerAlgorithm, SSECustomerKey, SSECustomerKeyMD5, RequestPayer, PartNumber```

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tagging @malfet again, as these inner comments are notoriously hard to discover. Hope it's no big deal 😇

@matteius matteius mentioned this pull request Jul 13, 2023
@thejcannon
Copy link

If you don't want to put more man-hours into this, I wouldn't mind picking this up to be done alongside/after #1457.

I want the same bandwidth savings for myself, my engineers, and everyone else. So I'm really eager to get this in! 😄

@matteius
Copy link
Contributor Author

If you don't want to put more man-hours into this

I'd like to see it through, thanks for your guidance -- I'll push some more commits soon.

@thejcannon
Copy link

Bitchin' And thanks for your patience. Hopefully by the time the Meta folks stop by this'll be an easy approval 👍

…ects to be a Dict mapping the key to the checksum, update usage code.
@matteius matteius requested a review from thejcannon July 13, 2023 02:47
@matteius
Copy link
Contributor Author

@thejcannon This is how I would track the checksums, could you have a look and see if it makes sense to you too?

s3_management/manage.py Outdated Show resolved Hide resolved
Copy link

@thejcannon thejcannon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking really good. Likely the last wave of comments 👍

sanitized_key = obj.key.replace("+", "%2B")
objects.append(sanitized_key)
objects.append((sanitized_key, sha256))

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This still has objects as a list. I don't see it being converted to a dict anywhere?

I think you can just change it on line 343 to a dict and here to objects[sanitized_key] = sha256

s3_management/manage.py Outdated Show resolved Hide resolved
@@ -121,8 +120,8 @@ def between_bad_dates(package_build_time: datetime):


class S3Index:
def __init__(self: S3IndexType, objects: List[str], prefix: str) -> None:
self.objects = objects
def __init__(self: S3IndexType, objects: Dict[str, str], prefix: str) -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The RHS should be str | None

Suggested change
def __init__(self: S3IndexType, objects: Dict[str, str], prefix: str) -> None:
def __init__(self: S3IndexType, objects: Dict[str, str | None], prefix: str) -> None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think there's a couple other places this should be done as well.

@@ -146,7 +145,7 @@ def nightly_packages_to_show(self: S3IndexType) -> Set[str]:
# also includes versions without GPU specifier (i.e. cu102) for easier
# sorting, sorts in reverse to put the most recent versions first
all_sorted_packages = sorted(
{self.normalize_package_version(obj) for obj in self.objects},
{self.normalize_package_version(s3_key) for s3_key in self.objects.keys()},

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

flake8-simplify (link) suggests just iterating over the dict instead of explicitly calling .keys(). We could talk about the likely very itty bitty performance bump, but lol.

Is there a reason you prefer .keys()?

s3_management/manage.py Outdated Show resolved Hide resolved
if package_name is not None:
if self.obj_to_package_name(obj) != package_name:
continue
if self.is_obj_at_root(obj) or obj.startswith(subdir):
yield obj
yield obj, checksum

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The return type of this function needs updating

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe this is fixed now.

normalized_package_version = self.normalize_package_version(obj)
if not normalized_package_version in to_hide:
nightly_packages[normalized_package_version] = checksum
return nightly_packages

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also the return type needs updating

s3_management/manage.py Outdated Show resolved Hide resolved
matteius and others added 3 commits July 13, 2023 21:14
use dictionary comprehension and maintain consistency of original key.

Co-authored-by: Josh Cannon <joshdcannon@gmail.com>
Co-authored-by: Josh Cannon <joshdcannon@gmail.com>
@matteius
Copy link
Contributor Author

If we could get some stats from Meta about the S3 cost savings (did some napkin math, its probably way wrong, but I estimate could be north of 200,000$ a month savings if 200,619*16*0.08 is a meaningful calculation (the average monthly downloads from pypi torch, but I assume the gpu specific indexes are more popular) -- anyway would be interesting to have insight into 😁

@vit-zikmund
Copy link

Hey @matteius & @thejcannon , I just wanted to say thanks for trying to push all this further. All I had time for so far was the analysis in #1347, I hope it was at least somewhat helpful 😄
While I'm not in any particular position for suggesting anything for the PR here, here's something that should hopefully make the change thinner and a bit better to manage.
While the obj[ect] in the code is just a str with a local path (or an s3 key), you could define a dataclass to represent the object with more attributes like this:

@dataclasses.dataclass(frozen=True)
class S3Object:
  key: str
  checksum: str | None

def __str__(self):
  return self.key

By overriding the __str__ method it gets to be printed as before. This might not be enough in some places and one will need to reach for the obj.key, but that shouldn't be a big hassle. This is extensible beyond just the checksum and one can keep all the previous sets & lists you switched for a dict. This dataclass might also bear a metadata: str | bool | None property, which could hold the metadata presence boolean (or better its checksum) for @thejcannon's PEP 658 PR.

@thejcannon
Copy link

Oh yeah. I LOVE me some dataclasses (no seriously). I think there's obviously some trepidation in refactoring code you don't-quite-own, so that kind of change is likely a good idea to have in a dedicated PR and perhaps encouraged to be merged before this or https://github.com/pytorch/builder/pull/1457/files#diff-b4c713cb4f974318a824c8d87db6e78eec6b4b9e129b3e5a83f4268bfb3320b0.

@vit-zikmund
Copy link

vit-zikmund commented Jul 14, 2023

that kind of change is likely a good idea to have in a dedicated PR and perhaps encouraged to be merged before this or https://github.com/pytorch/builder/pull/1457/files#diff-b4c713cb4f974318a824c8d87db6e78eec6b4b9e129b3e5a83f4268bfb3320b0.

Thanks for your kind words @thejcannon. I don't want to hijack this thread more than I feel necessary (crossed that already), but with all due respect I don't see any reason in pushing such a standalone refactoring change in my own PR given there's been over a month of zero activity on #1347 after I tagged 2 owners (hopefully politely enough). I read you write you got in contact with them, so I hope there's some real collaboration going on behind what we see here. I never got that far and thus will crawl back to my lair and wait for you to play the big game to the successful end, wishing you (us) all the best.

Either way, you both guys have a partially conflicting & related PRs now, so if luck has it one will need to rebase & resolve one's PR on top of the other's. My dataclass suggestion that can tie these two together lies in the field to be picked up or not, no problem. Let's focus on getting anything that makes sense to work and stop all these agonizing downloads. Thank you! 🤞

@thejcannon
Copy link

I read you write you got in contact with them, so I hope there's some real collaboration going on behind what we see here. I never got that far and thus will crawl back to my lair and wait for you to play the big game to the successful end, wishing you (us) all the best.

I wouldn't be so quick to disparage yourself in a community of peers. I only got in contact with some folks by nagging a very nice Meta employee I met at PyCon earlier this year. Then they suggested we have the discussion(s) out in the open, so also nothing going on behind the scenes. As much excitement as we all have I'm sure the slow wheel of Enterprise is churning on, being methodical and deliberate. So now we just wait I suppose (until I feel the need to nag some more 😉 )

Your thorough comment on #1347 and your eye for detail above only proves your input in these discussions is valuable. So I would happily review (and outsiders-approve) a PR you put forth for your great idea. Then it'd just be a race to see who gets accepted first 😈

matteius and others added 3 commits August 1, 2023 01:08
Co-authored-by: Vít Zikmund <75443448+vit-zikmund@users.noreply.github.com>
@matteius
Copy link
Contributor Author

matteius commented Aug 1, 2023

I took a shot at the refactor to use the dataclass.

Copy link

@vit-zikmund vit-zikmund left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @matteius, I'm really honored you gave my suggestion a chance! 🙇 It looks great. The resulting diff is indeed smaller and better to read 😉

I've took the liberty to check the result and drop a few comments/suggestions, most of which try to make the new code occupy a tiny bit less lines.

Thank you once again!

s3_management/manage.py Outdated Show resolved Hide resolved
s3_management/manage.py Outdated Show resolved Hide resolved
s3_management/manage.py Outdated Show resolved Hide resolved
s3_management/manage.py Show resolved Hide resolved
matteius and others added 4 commits August 1, 2023 08:41
Co-authored-by: Vít Zikmund <75443448+vit-zikmund@users.noreply.github.com>
Co-authored-by: Vít Zikmund <75443448+vit-zikmund@users.noreply.github.com>
Co-authored-by: Vít Zikmund <75443448+vit-zikmund@users.noreply.github.com>
Co-authored-by: Vít Zikmund <75443448+vit-zikmund@users.noreply.github.com>
Copy link

@vit-zikmund vit-zikmund left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice 👍 Now to get some real stakeholders to notice ⌛

@malfet malfet merged commit dbad8b7 into pytorch:main Sep 23, 2023
1 check passed
@thejcannon
Copy link

@matteius congrats

@malfet wanna review the accompanying PR? #1457

@malfet
Copy link
Contributor

malfet commented Sep 23, 2023

@thejcannon first I need to fix all the bugs introduced by this change (first of them, is that str | None is not a valid type annotation), but sure, will try to review this one soon

@thejcannon
Copy link

from __future__ import annotations?

Also consider that these kinds of bugs are introduced by not having sufficient checks gate the PR

malfet added a commit that referenced this pull request Sep 23, 2023
Replace `obj` with `obj.key` in few places
Dismantle pyramid of doom while iterating over objects

Test plan: Run `python manage.py whl/test --generate-pep503`
@akx akx mentioned this pull request Sep 29, 2023
jithunnair-amd added a commit to ROCm/builder that referenced this pull request Feb 22, 2024
* Set FORCE_RPATH for ROCm (pytorch#1468)

* Decouple aarch64 ci setup and build (pytorch#1470)

* Run  git update-index --chmod=+x aarch64_ci_setup.sh (pytorch#1471)

* [aarch64][CICD]Add aarch64 docker image build. (pytorch#1472)

* Add aarch64 docker image build

* removing ulimit for PT workflow

* set aarch64 worker for docker build

* Fix `install_conda.sh`

By pinning conda version to 23.5.2 as latest(23.7.2 at this time) does not have a compatible version of `git` packages

Fixes pytorch#1473

* Remove explicit `conda install cmake`

As it's already done as part of `common/install_conda.sh` script

* update to CUDA 12.1U1 (pytorch#1476)

Should fix  pytorch/pytorch#94772 in wheel builds

* Use conda version 23.5.2 for conda pytorch build (pytorch#1477)

* Use py311 miniconda install (pytorch#1479)

* Windows conda build fix (pytorch#1480)

* Revert "Use py311 miniconda install (pytorch#1479)" (pytorch#1481)

This reverts commit 5585c05.

* Remove c/cb folder on windows (pytorch#1482)

* Add numpy install - fix windows smoke tests (pytorch#1483)

* Add numpy install

* Add numpy install

* Add hostedtoolcache purge step (pytorch#1484)

* Add hostedtoolcache purge step

* Change step name

* Update CUDA_UPGRADE_GUIDE.MD

* update CUDA to 12.1U1 for Windows (pytorch#1485)

* Small improvements in build pytorch script (pytorch#1486)

* Undo using conda activate (pytorch#1487)

* Update meta.yaml (pytorch#1389)

* Add pytorch-triton-rocm as an install dependency for ROCm (pytorch#1463)

* Add pytorch-triton-rocm as an install dependency for ROCm

* Update build_rocm.sh

* Add aarch64 to validation framework (pytorch#1474)

* Add aarch64 to validation framework (pytorch#1489)

* Add aarch64 to validation framework (pytorch#1490)

* Add aarch64 to validation framework

* Add aarch64 to validation framework

* Add aarch64 to validation framework (pytorch#1491)

* Add aarch64 to validation framework

* Add aarch64 to validation framework

* Add aarch64 to validation framework

* Temporary disable poetry test (pytorch#1492)

* Add torchonly option to validation workflows (pytorch#1494)

* Add torchonly option to validation workflows

* fix typo

* Remove pipy validation temporarily (pytorch#1495)

* Remove pipy validation temporarily (pytorch#1496)

* Add no-sudo to linux-aarch64 tests (pytorch#1499)

* Pass container image to aarch64 test jobs (pytorch#1500)

* Add setup aarch64 builds for aarch64 testing (pytorch#1501)

* Fix DESIRED_PYTHON setting for aarch64 validations (pytorch#1502)

* Use extra-index-url for aarch64 builds (pytorch#1503)

* Pypi validation enable (pytorch#1504)

* Validation pypi torchonly (pytorch#1505)

* Pipy validation workflow (pytorch#1506)

* Pipy validation workflow (pytorch#1507)

* Pipy validation workflow (pytorch#1508)

* Pipy validation workflow (pytorch#1509)

* Validate poetry workflow (pytorch#1511)

* Validate poetry workflow (pytorch#1512)

* Remove linux-aarch64 installation workaround (pytorch#1513)

* Temporary change test aarch64 builds (pytorch#1514)

* Remove torchonly restictions from aarch64 builds (pytorch#1517)

* Fix aarch64 nightly/release version override (pytorch#1518)

* Aarch64 fix overrdie passing from CI to build

* Aarch64 fix overrdie passing from CI to build

* Aarch64 fix overrdie passing from CI to build

* Revert "Temporary change test aarch64 builds (pytorch#1514)" (pytorch#1521)

This reverts commit 1e281be.

* Changes related to OVERRIDE_PACKAGE_VERSION in aarch64 builds (pytorch#1520) (pytorch#1523)

* Torchmetrics in S3 Index (pytorch#1522)

We will need the stable torchmetrics wheel in the S3 index, since torchrec depends on it. This is similar to how pytorch depends on numpy, etc. and these binaries need to be hosted in our index when uses try to pip install from download.pytorch.org.

* [aarch64] update ACL version to v23.05.1 and OpenBLAS to v0.3.20 (pytorch#1488)

* Changed runner for linux arm64 (pytorch#1525)

* Add torch-tensorrt to S3 PyPI Index (pytorch#1529)

As pytorch/tensorrt moves off of CCI onto Nova, we must to host their nightlies on our S3 index. This change allows the indexing to occur correctly for this package.

* Enable torch compile for python 3.11 smoke tests (pytorch#1534)

* Enable torch compile for python 3.11 smoke tests

* Make sure release is covered

* Fix typo

* add jinja2 (pytorch#1536)

* Remove restriction on 3.11 (pytorch#1537)

* Revert "add jinja2 (pytorch#1536)" (pytorch#1538)

This reverts commit 224a4c5.

* S3 Management Job Outside Docker (pytorch#1531)

* S3 Management Job Outside Docker

* job name

* remove failfast

* no matrix

* inherit secrets

* spacing?

* random nits

* add back secrets

* add back matrix

* export env vars correctlty

* Update update-s3-html.yml

* Add fbgemm-gpu to S3 Index (pytorch#1539)

* Update builder images to ROCm5.7 (pytorch#1541)

* Update docker build images for rocm5.7

* Fix erroneous logic that was skipping msccl files even for ROCm5.6; update msccl path for ROCm5.7

(cherry picked from commit 36c10cc)

* missing bzip2 package install for miopen

* Revert "missing bzip2 package install for miopen"

This reverts commit 8ef5fc9.

* ROCm 5.7 MIOpen does not need any patches, do not build from source

---------

Co-authored-by: Jeff Daily <jeff.daily@amd.com>

* Update docker build convenience scripts to ROCm5.7 (pytorch#1543)

* Do not uninstall MIOpen if skipping build-from-source (pytorch#1544)

* Install nvtx3 on Windows (pytorch#1547)

* Provide file hashes in the URLs to avoid unnecessary file downloads (bandwidth saver) (pytorch#1433)

Supply sha256 query parameters using boto3 to avoid hundreds of extra Gigabytes of downloads each day during pipenv and poetry resolution lock cycles.

Fixes point 1 in pytorch/pytorch#76557
Fixes pytorch#1347

* Workaround for older files

* Bugfixes introduced by pytorch#1433

Replace `obj` with `obj.key` in few places
Dismantle pyramid of doom while iterating over objects

Test plan: Run `python manage.py whl/test --generate-pep503`

* [S3_management] Update boto3 to 1.28.53

* [manage_s3] Download objects metadata concurrently

Using `concurrent.futures.ThreadPoolExecutor`
This speeds up rebuilding `whl/test` index from 300 sec to 90 sec on my
laptop

* Make smoke-test runnable without envvars

* [aarch64] set acl_build_flags arch=armv8a, remove editing build flags (pytorch#1550)

Looking at this PR:
pytorch#1370
this line:
https://github.com/pytorch/builder/pull/1370/files#diff-54480d0a69ca27f54fb0736a9762caa8b03bd4736dcd77190d99ec3033c9bd2fR229

That fixed the issue:
pytorch/pytorch#97226

One of the changes is to set 
```
arch=armv8a
```
We are experiencing the same issue now: pytorch/pytorch#109312
Hence this fix.

* [BE] Fix all flake8 violations in `smoke_test.py` (pytorch#1553)

Namely:
 - `if(x):` -> `if x:`
 - `"dev\d+"` -> `"dev\\d+"`
 - Keep 2 newlines between functions
 - Add `assert foo is not None` to suppress "variable assigned but not used" warning

* [aarch64] patch mkl-dnn to use 'march=armv8-a' as the default build (pytorch#1554)

* [aarch64] patch pytorch 2.1 for mkl-dnn fix (pytorch#1555)

* patch ci script with mkldnn fix (pytorch#1556)

* [BE] Add lint workflow (pytorch#1557)

And format `smoke_test.py` with `ruff`
Invoke/confgure `ruff` using `lintrunner`
Copy lint runner adapters from https://github.com/pytorch/pytorch/tree/main/tools/linter/adapters

* [BE] Add `s3_management` to the linted folders (pytorch#1558)

Add `PERF401` to list of ignored suggestions, fix the rest.

* Fix path issue when building aarch64 wheels (pytorch#1560)

* Fix linalg smoke tests (pytorch#1563)

* Towards enabling M1 wheel builds

Do not try to install MKL on Apple Silicon

* And only install llvm-9 on x86 systems

* Do not build tests when building natively on M1

* And fix Python-3.8 native compilation on M1

There are no numpy=3.17 for M1

* Release 2.1 update promotion scripts (pytorch#1564)

* [BE] Small code cleanup

Fold multiple inidices and single index generation into one loop

As loop body is the same anyway...

* S3_management: Add option to  compute sha256

That will be used later to generate sha256 indexes in PEP503

* Remove debug print

* [S3_management] Minor improvements

- Refactor `fetch_obj_names` into class method
- Make sure that object remains public when ACL is computed
- Add `has_public_read` and `grant_public_read` class methods

* s3_management: compute checksum in cloud

I.e. file never gets downloaded on the client, which is a nice thing

* [S3Management] Add `undelete_prefix` method

That can be used to recover object in a versioned bucket

* Validate poetry for release (pytorch#1567)

* Validate poetry for release

* test

* test

* fixtypo

* Use released version of 3.12 (pytorch#1568)

As it was released on Oct 6 2023: https://www.python.org/downloads/release/python-3120/

* Move manywheel builds to `linux.12xlarge.ephemeral` (pytorch#1569)

Should be faster(<20 min vs 40+ min) and as secure as using GH ones

* Add cuSparseLt-0.5.0 to manywheel images

* Use `linux.12xlarge.ephemeral` for conda docker builds (pytorch#1570)

As `ubuntu.20.04` often OOM/failed to fetch data from RHEL repo

* Revert "Add cuSparseLt-0.5.0 to manywheel images"

This reverts commit 00841b6 as
cuSparseLT is not compatible with CentOS 7

* Move libtorch docker builder to `linux.12xlarge.ephemeral` (pytorch#1571)

As running it on `ubutu22.04` often results in flay infra failures/running out of disk space, for example, from https://github.com/pytorch/builder/actions/runs/6484948230/job/17609933012
```
cat: write error: No space left on device
```

* Add cuSparseLt-0.4.0 to manywheel images

But set USE_CUSPARSELT to 0 by default

* Add xformers to the list of indexable packages

* Build wheels with cuSparseLt

Build libtorch without cuSparseLt so far

Factor out `DEPS_LIST` to top level and add cuSparseLt of
`USE_CUSPARSELT` is set to 1

Tested in pytorch/pytorch#111245

* Do not build conda with CuSparseLT

* Add ROCM_PATH env var to Dockerfile for ROCm5.7 issue with finding HIP (pytorch#1572)

* [aarch64_wheel] Minor typing improvements

* [aarch64_wheel] Flake8 fix

* [aarch64_wheel] Cosmetic changes

* [aarch64_wheel] Fix readdir crash

Probably fixes pytorch/pytorch#111695

* [S3_management] generate libtorch index.html

* [CI] Update ruff to 0.1.1

To keep it in sync with pytorch

* Get rid of http://repo.okay.com.mx (pytorch#1575)

* [S3_management] Print time it takes to fetch index

* [S3_manage] Handle invalid versions

* [S3_management] Fix Version on error

And fix flake8 lint violation

* [S3_Management] Refactor `from_S3`

Move `fetch_metadata` into its own method, which could be called later on

Make S3Object non-frozen and introduce implicit __hash__ method

* [S3_Management] Filter nighly before `fetch_metadata`

This reduces time to call `from_S3Index` from 600 to 80 sec

* Add option to build -arm64- libtorch binaries

* [Docker] Remove trailing whitespace

And cause docker rebuild, to overwrite docker build from release/2.1
branch artifacts

* [MacOS] Small changes to libtorch naming

Intel x86 libtorch builds will have `x86_64` suffix and Apple Silicon ones will have `arm64` ones, but latest will point to Intel ones for now.

* Update libtorch/Dockerfile to use Ubuntu-20.04 (pytorch#1578)

As 18.04 EOLed

* Conda builds should respect `MAX_JOBS`

May be this help with OOMs

* [S3_management] Fix subpackage urls

Make them `lower()`

* Advance versions for release 2.1.1 (pytorch#1583)

* [aarch64] Release pypi prep script change for aarch64 builds (pytorch#1585)

* Changes needed for core enablement of 3.12 binary wheels (pytorch#1586)

* Fix aarch64 build on 3.8 (pytorch#1593)

* Add some more validation checks for torch.linalg.eigh and torch.compile (pytorch#1580)

* Add some more validation checks for torch.linalg.eigh and torch.compile

* Update test

* Also update smoke_test.py

* Fix lint

* Revert "Add some more validation checks for torch.linalg.eigh and torch.compile (pytorch#1580)" (pytorch#1594)

This reverts commit 4c7fa06.

* Release validations using release version matrix (pytorch#1611)

* Release pypi prep change (pytorch#1587)

* [aarch64] Release pypi prep script change for aarch64 builds

* Release versions for testing

Testing calling version (pytorch#1588)

Upstream/release validations (pytorch#1589)

* Testing calling version

* add release matrix

Upstream/release validations (pytorch#1590)

* Testing calling version

* add release matrix

* test

test (pytorch#1591)

test (pytorch#1592)

Release v1 (pytorch#1595)

* test

* test

Release v1 (pytorch#1596)

* test

* test

* test

test (pytorch#1597)

Test versions validations (pytorch#1598)

* test

* basedir

Test versions validations (pytorch#1599)

* test

* basedir

* test

test (pytorch#1600)

* test

* test

Add release versions everywhere (pytorch#1601)

* test

* test

* test

* test

test (pytorch#1602)

Test version validations (pytorch#1603)

* test

* test

Test version validations (pytorch#1604)

* test

* test

* test

tests (pytorch#1605)

More tests nov16 (pytorch#1606)

* tests

* test

More tests nov16 (pytorch#1607)

* tests

* test

* test

More tests nov16 (pytorch#1608)

* tests

* test

* test

* test

More tests nov16 (pytorch#1609)

* tests

* test

* test

* test

* test

* fix_lint

* fix: typo (pytorch#1581)

* desired_cuda -> DESIRED_CUDA (pytorch#1612)

* desired_cuda -> DESIRED_CUDA

Found with shellcheck

* Update manywheel/build_cuda.sh

Co-authored-by: Nikita Shulga <2453524+malfet@users.noreply.github.com>

---------

Co-authored-by: Nikita Shulga <2453524+malfet@users.noreply.github.com>

* [BE] Cleanup build unused code (pytorch#1613)

1. Upload Scripts are not used anymore. We use Github Action upload workflows
2. M1 Builds are now automated
3. build_all.bat run git grep in pytorch and builder - No result

* Changes to pypi release promotion scripts introduced for 2.1.0 and 2.1.1 (pytorch#1614)

* Changes topypi release promotion scripts introduced during 2.1.1

* typo

* Pin miniconda version for Windows

To Miniconda3-py311_23.9.0-0-Windows-x86_64.exe

* Fix poetry and pypi validations when version is specified (pytorch#1622)

* test (pytorch#1617)

Fix validations (pytorch#1618)

* test

* poetry_fix

* test

Fix validations (pytorch#1619)

* test

* poetry_fix

* test

* test

* restrict

* Validate pypi build only for release (pytorch#1623)

* Validate pypi build only for release (pytorch#1624)

* [Manywheel] Do not hardcode triton version

* [Manywheel][BE] Dedup Triton requirement spec

* [Manywheel] Restrict `pytorch-triton` to x86-64 Linux

Partially addresses pytorch/pytorch#114042

* Tweak py312 conda requirements

* Build PyTorch without TLS for 3.12

Because GLOO still expect OpenSSL-1, but 3.12 is build with OpenSSL-3

* [conda] Skip sympy for 3.12

As at the moment it is only available for Windows %)

* [conda] Do not depend on triton for 3.12 yet

* Tweak mkl requirements for win+py312

* Add aarch64 conda env lib to LD_LIBRARY_PATH (pytorch#1628)

After the change on pytorch#1586, nightly aarch64 wheel fails to find `libopenblas.so` which is now installed under `/opt/conda/envs/aarch64_env/lib/` instead of the base conda `/opt/conda/lib`.  Using CPU nightly wheels on aarch64 from Nov 16 then ends up with the error as described in pytorch/pytorch#114862: `Calling torch.geqrf on a CPU tensor requires compiling PyTorch with LAPACK. Please use PyTorch built with LAPACK support`.  The error can be found on night build log https://github.com/pytorch/pytorch/actions/runs/6887666324/job/18735230109#step:15:4933

Fixes pytorch/pytorch#114862

I double check `2.1.[0-1]` and the current RC for 2.1.2, the issue is not there because pytorch#1586 only change builder main, thus impacting nightly.

### Testing

Build nightly wheel manually on aarch64 runner and confirm that openblas is detected correctly:

```
-- Found a library with BLAS API (open). Full path: (/opt/conda/envs/aarch64_env/lib/libopenblas.so)
...
--   USE_BLAS              : 1
--     BLAS                : open
--     BLAS_HAS_SBGEMM     :
--   USE_LAPACK            : 1
--     LAPACK              : open
...
```

* Revert "[conda] Skip sympy for 3.12"

This reverts commit 88457a1.
As sympy has been updated to 1.12 and it now supports Python-3.12

* [aarch64] ACL, OpenBLAS and mkldnn updates for PyTorch 2.2 (pytorch#1627)

Note# ~~This PR has a dependency on updating the oneDNN version to v3.3 (via ideep submodule to v3.3)~~
ideep submodule update is done, so, this PR can be merged anytime now.

This PR is for:
ACL - build with fixed format kernels 
OpenBLAS - upgrade the version to 0.3.25
numpy - upgrade version to 1.26.2
and mkldnn - cleanup the patches that are already upstreamed.

* Validation scripts, install using version (pytorch#1633)

* Test Windows static lib (pytorch#1465)

Add support for testing Windows Cuda static lib

* Pin windows intel-openmp to 2023.2.0 (pytorch#1635) (pytorch#1636)

* Torch compile test for python 3.8-3.11 linux only (pytorch#1629)

This should fix failure on with Python 3.12 validations:
https://github.com/pytorch/builder/actions/runs/7064433251/job/19232483984#step:11:4859

* [aarch64] cleanup mkldnn patching (pytorch#1630)

pytorch is moved to oneDNN v3.3.2 and some of the
 old patches are not applicable any more.

* Add `aarch64_linux` to the list of linted files

* Actually fix lint this type

* Extend test_linalg from smoke_test.py

To take device as an argument and run tests on both cpu and cuda

* Run smoke_test_linalg during check_binary

This is a regression test for pytorch/pytorch#114862

* Fix linalg testing

* [BE] Add CI for check_binary.sh changes (pytorch#1637)

Make sure latest nightly passes the testing for:
 - Linux Wheel CPU
 - Linux Wheel CUDA

Tweak script a bit to work correctly with relative path to executable

* Keep nightly 20231010 for ExecuTorch alpha 0.1 for now (pytorch#1642)

* [Validations] do conda update before starting validations (pytorch#1643)

* [Validations] Validate aarch64 if all is slected (pytorch#1644)

* Fix validation workflow on aarch64 with conda 23.11.0 and GLIBC_2.25 (pytorch#1645)

* Debug aarch64 clone

* Debug

* Fix validation workflow with conda 23.11.0 and GLIBC_2.25

* Gate the change on linux-aarch64 and keep the old LD_LIBRARY_PATH

* Try to unset LD_LIBRARY_PATH in the workflow instead

* Fix copy/paste typo

* Do not hardcode triton version in builder code (pytorch#1646)

* Do not hardcode triton version in builder code

* Minor tweak to use pytorch_rootdir

* [Lint] Prohibit tabs in shell scripts

Fix current violations

* Link conda packages with cusparselt

Fixes pytorch/pytorch#115085

* aarch64: patch mkl-dnn for xbyak crashes due to /sys not accessible (pytorch#1648)

There are platforms with /sys not mounted. skip handling HW caps
for such platforms.

cherry-pick of: oneapi-src/oneDNN#1773
This fixes the issue# pytorch/pytorch#115482

* Update builder images to ROCm6.0 (pytorch#1647)

* Update ROCm versions for docker images

* Don't build MIOpen from source for ROCm6.0

* Temporarily use magma fork with ROCm6.0 patch

* Update ROCm versions for docker images

* Add gfx942

* Update MIOpen repo

* Magma PR 42 is merged, so use upstream repo master branch now

* gfx942 target only fully supported for ROCm6.0 and above

* Avoid finding out std::basic_string_view (pytorch#1528)

As pytorch moving to C++17, the binary can contain both "std::basic_string_view" and "std::__cxx11::basic_string<", change the pattern to avoid finding out std::basic_string_view, causing false positives.

* Add test ops validation for validation workflows (pytorch#1650)

* Add test ops validation

* include workflows

* Add test ops validation for validation workflows (pytorch#1651)

* Add test ops validation for validation workflows (pytorch#1652)

* Add test ops validation for validation workflows (pytorch#1653)

* Add test ops validation for validation workflows (pytorch#1654)

* Add test ops validation for validation workflows (pytorch#1655)

* [validations] Add missing required packages (pytorch#1656)

* [validations] Perform test_ops only on CUDA binaries (pytorch#1657)

* [validations] Adjust timeout for linux jobs (pytorch#1658)

* [validations] Restrict testing for python 3.8-3.11 (pytorch#1659)

* [validations] Fix use case if INCLUDE_TEST_OPS is not set (pytorch#1660)

* Add unit tests and one line reproducers to detect bad pytorch cuda wheels (pytorch#1663)

* Add one line reproducers and unit tests that would fail when bad wheels
were generated by the compiler(s).
nextafter reproducer thanks to @malfet!

* cosmetic fixes

* fix comments

* Fix quotation issues when migrating from python file to one line format (pytorch#1664)

Sorry, looks like the last line had an issue while porting it from multi-line python file to one-line.

Side question: when does this file get used? Is it only used during release binary generation/testing?

* Add nccl version print for cuda related smoke test (pytorch#1667)

* Apply nccl test to linux only (pytorch#1669)

* Build nccl after installing cuda (pytorch#1670)

Fix: pytorch/pytorch#116977

Nccl 2.19.3 don't exist for cuda 11.8 and cuda 12.1. Refer to https://docs.nvidia.com/deeplearning/nccl/release-notes/rel_2-19-3.html#rel_2-19-3 CUDA 12.0, 12.2, 12.3 are supported.

Hence we do manual build. Follow this build process:
https://github.com/NVIDIA/nccl/tree/v2.19.3-1?tab=readme-ov-file#build

We want nccl version be exactly the same as installed here:
https://github.com/pytorch/pytorch/blob/main/.github/scripts/generate_binary_build_matrix.py#L45

* Update cusparselt to v0.5.2 (pytorch#1672)

This PR adds in support for cuSPARSELt v0.5.2 and updates the cuda 12.1 build step to use it instead of 0.4.0

Also fixes a typo when deleting the cusparselt folder after installing.

* Run test ops tests from outside of pytorch root folder (pytorch#1676)

* Remove s3 update html job and scripts (pytorch#1677)

* [BE] Remove unused nightly_defaults.bat (pytorch#1678)

* [Conda] Mark `blas * mkl` as x86 only dependency

* [Conda] Download arch appropriate Miniconda

By using `$(uname -m)` as suffix, which is arm64 on Apple Silicon and
x86 on Intel Macs

* [Conda] Do not depend on llvmdev-9 on ARM

As earliest available for the platform is llvmdev-11

* [Conda] Set correct developer dir for MacOS runners

* [Conda] Add llvm-openmp dependency for ARM64

PyTorch for M1 is finally built with OpenMP, so it needs to depend on it

* Use dynamic MKL on Windows (pytorch#1467)

Use dynamic MKL on Windows and updated MKL to 2021.4.0
On conda python 3.12 use mkl 2023.1

* Add torchrec to promote s3 script (pytorch#1680)

* Add torchrec to promote s3 script

* Add torchrec version to release_version.sh

* Revert "Dynamic MKL windows" (pytorch#1682)

* Revert "Revert "Dynamic MKL windows"" (pytorch#1683)

* Add numpy install to windows conda tests (pytorch#1684)

* Windows conda test. Install numpy in conda testenv (pytorch#1685)

* Add fbgemm to promote s3 script (pytorch#1681)

* Release 2.2.0 pypi prep script modifications (pytorch#1686)

* [Analytics] add pypi staging validations, remove circleci script (pytorch#1688)

* [Analytics] Pypi validations. Add call to check-wheel-contents (pytorch#1689)

* Modify Validate Nightly PyPI Wheel Binary Size to pick correct binary (pytorch#1690)

* Fix test_ops scripts on release validation testing (pytorch#1691)

* Add option to validate only from download.pytorch.org (pytorch#1692)

* Exclude pipy and poetry tests when USE_ONLY_DL_PYTORCH_ORG is set (pytorch#1693)

* [ROCm] add hipblaslt library files (pytorch#1695)

With pytorch/pytorch#114329 merged, we need to include hipblaslt library files within the ROCm wheel.

* Minor tweak to fbgemmgpu version to ignore RC suffix (pytorch#1694)

* Remove custom PyTorch build dependency logic on 3.11 (pytorch#1697)

* Remove custom PyTorch build dependency logic on 3.11

* Add a smoke test for openmp

* Pin conda-build to 3.28.4 (pytorch#1698)

* ci: aarch64 linux: fix torch performance issue with conda openblas package (pytorch#1696)

changing the conda openblas package from pthread version
to openmp version to match torch openmp runtime. The pthread
version was conflicting with the openmp runtime and causing
thread over-subscription and performance degradation.

* Add triton version for nightly and release (pytorch#1703)

* Bundle PTXAS into 11.8 wheel

* Add tensorrt promo script, bump release version for 2.2.1 (pytorch#1706)

* Pin Conda to 23.11.0

---------

Co-authored-by: Andrey Talman <atalman@fb.com>
Co-authored-by: Mike Schneider <104035434+xncqr@users.noreply.github.com>
Co-authored-by: Nikita Shulga <nshulga@meta.com>
Co-authored-by: ptrblck <ptrblck@users.noreply.github.com>
Co-authored-by: JYX <jyx21@mails.tsinghua.edu.cn>
Co-authored-by: Omkar Salpekar <osalpekar@gmail.com>
Co-authored-by: snadampal <87143774+snadampal@users.noreply.github.com>
Co-authored-by: Danylo Baibak <baibak@meta.com>
Co-authored-by: Supadchaya <138070207+spcyppt@users.noreply.github.com>
Co-authored-by: Jeff Daily <jeff.daily@amd.com>
Co-authored-by: cyy <cyyever@outlook.com>
Co-authored-by: Matt Davis <matteius@gmail.com>
Co-authored-by: Nikita Shulga <2453524+malfet@users.noreply.github.com>
Co-authored-by: Huy Do <huydhn@gmail.com>
Co-authored-by: albanD <desmaison.alban@gmail.com>
Co-authored-by: Luo Bo <84075753+0x804d8000@users.noreply.github.com>
Co-authored-by: Sergii Dymchenko <kit1980@gmail.com>
Co-authored-by: Ionuț Manța <ionut@janeasystems.com>
Co-authored-by: Wei Wang <143543872+nWEIdia@users.noreply.github.com>
Co-authored-by: Jesse Cai <jessecai@fb.com>
Co-authored-by: henrylhtsang <91030427+henrylhtsang@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Pip packaging and publishing improvements in pytorch wheels for better integration with poetry
5 participants