mirror of
				https://github.com/clearml/clearml-agent
				synced 2025-06-26 18:16:15 +00:00 
			
		
		
		
	Add agent.package_manager.pytorch_resolve configuration setting with pip or direct values. pip sets extra index based on cuda and lets pip resolve, direct is the previous parsing algorithm that does the matching and downloading (default pip)
				
					
				
			This commit is contained in:
		
							parent
							
								
									fec0ce1756
								
							
						
					
					
						commit
						5b5fb0b8a6
					
				| @ -80,6 +80,16 @@ | ||||
|         # additional artifact repositories to use when installing python packages | ||||
|         # extra_index_url: ["https://allegroai.jfrog.io/clearml/api/pypi/public/simple"] | ||||
| 
 | ||||
|         # control the pytorch wheel resolving algorithm, options are: "pip", "direct" | ||||
|         # "pip" (default): would automatically detect the cuda version, and supply pip with the correct | ||||
|         # extra-index-url, based on pytorch.org tables | ||||
|         # "direct": would resolve a direct link to the pytorch wheel by parsing the pytorch.org pip repository | ||||
|         # and matching the automatically detected cuda version with the required pytorch wheel. | ||||
|         # if the exact cuda version is not found for the required pytorch wheel, it will try | ||||
|         # a lower cuda version until a match is found | ||||
|         # | ||||
|         # pytorch_resolve: "pip" | ||||
| 
 | ||||
|         # additional conda channels to use when installing with conda package manager | ||||
|         conda_channels: ["pytorch", "conda-forge", "defaults", ] | ||||
| 
 | ||||
|  | ||||
| @ -310,6 +310,12 @@ class PytorchRequirement(SimpleSubstitution): | ||||
|             # yes this is for linux python 2.7 support, this is the only python 2.7 we support... | ||||
|             if py_ver and py_ver[0] == '2' and len(parts) > 3 and not parts[3].endswith('u'): | ||||
|                 continue | ||||
| 
 | ||||
|             # check if this an actual match | ||||
|             if not req.compare_version(v) or \ | ||||
|                     (last_v and SimpleVersion.compare_versions(last_v, '>', v, ignore_sub_versions=False)): | ||||
|                 continue | ||||
| 
 | ||||
|             # update the closest matched version (from above) | ||||
|             if not closest_v: | ||||
|                 closest_v = v | ||||
| @ -318,10 +324,6 @@ class PytorchRequirement(SimpleSubstitution): | ||||
|                     SimpleVersion.compare_versions( | ||||
|                         version_a=v, op='>=', version_b=req.specs[0][1], num_parts=3): | ||||
|                 closest_v = v | ||||
|             # check if this an actual match | ||||
|             if not req.compare_version(v) or \ | ||||
|                     (last_v and SimpleVersion.compare_versions(last_v, '>', v, ignore_sub_versions=False)): | ||||
|                 continue | ||||
| 
 | ||||
|             url = '/'.join(torch_url.split('/')[:-1] + l.split('/')) | ||||
|             last_v = v | ||||
| @ -475,6 +477,23 @@ class PytorchRequirement(SimpleSubstitution): | ||||
|         return self.match_version(req, base).replace(" ", "\n") | ||||
| 
 | ||||
|     def replace(self, req): | ||||
|         # we first try to resolve things ourselves because pytorch pip is not always picking the correct | ||||
|         # versions from their pip repository | ||||
| 
 | ||||
|         resolve_algorithm = str(self.config.get("agent.package_manager.pytorch_resolve", "pip")).lower() | ||||
|         if resolve_algorithm == "direct": | ||||
|             # noinspection PyBroadException | ||||
|             try: | ||||
|                 new_req = self._replace(req) | ||||
|                 if new_req: | ||||
|                     self._original_req.append((req, new_req)) | ||||
|                 return new_req | ||||
|             except Exception: | ||||
|                 pass | ||||
|         elif resolve_algorithm not in ("direct", "pip"): | ||||
|             print("Warning: `agent.package_manager.pytorch_resolve={}` " | ||||
|                   "unrecognized, default to `pip`".format(resolve_algorithm)) | ||||
| 
 | ||||
|         # check if package is already installed with system packages | ||||
|         self.validate_python_version() | ||||
| 
 | ||||
|  | ||||
| @ -240,6 +240,23 @@ class SimpleVersion: | ||||
|         if not version_b: | ||||
|             return True | ||||
| 
 | ||||
|         # remove trailing "*" in both | ||||
|         if "*" in version_a: | ||||
|             ignore_sub_versions = True | ||||
|             while version_a.endswith(".*"): | ||||
|                 version_a = version_a[:-2] | ||||
|             if version_a == "*": | ||||
|                 version_a = "" | ||||
|             num_parts = min(len(version_a.split('.')), len(version_b.split('.')), ) | ||||
| 
 | ||||
|         if "*" in version_b: | ||||
|             ignore_sub_versions = True | ||||
|             while version_b.endswith(".*"): | ||||
|                 version_b = version_b[:-2] | ||||
|             if version_b == "*": | ||||
|                 version_b = "" | ||||
|             num_parts = min(len(version_a.split('.')), len(version_b.split('.')), ) | ||||
| 
 | ||||
|         if not num_parts: | ||||
|             num_parts = max(len(version_a.split('.')), len(version_b.split('.')), ) | ||||
| 
 | ||||
|  | ||||
| @ -93,6 +93,16 @@ agent { | ||||
|         # extra_index_url: ["https://allegroai.jfrog.io/clearml/api/pypi/public/simple"] | ||||
|         extra_index_url: [] | ||||
| 
 | ||||
|         # control the pytorch wheel resolving algorithm, options are: "pip", "direct" | ||||
|         # "pip" (default): would automatically detect the cuda version, and supply pip with the correct | ||||
|         # extra-index-url, based on pytorch.org tables | ||||
|         # "direct": would resolve a direct link to the pytorch wheel by parsing the pytorch.org pip repository | ||||
|         # and matching the automatically detected cuda version with the required pytorch wheel. | ||||
|         # if the exact cuda version is not found for the required pytorch wheel, it will try | ||||
|         # a lower cuda version until a match is found | ||||
|         # | ||||
|         # pytorch_resolve: "pip" | ||||
| 
 | ||||
|         # additional conda channels to use when installing with conda package manager | ||||
|         conda_channels: ["pytorch", "conda-forge", "defaults", ] | ||||
|         # conda_full_env_update: false | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 allegroai
						allegroai