[Azure] KeyError when launching Azure cluster
The following error occurs occasionally. It seems to happen more often when `test_cancel_azure` and `test_azure_start_stop` run together.
```
  File "/home/ubuntu/skypilot/sky/skylet/providers/azure/node_provider.py", line 362, in _get_cached_node
    return self._get_node(node_id=node_id)
  File "/home/ubuntu/skypilot/sky/skylet/providers/azure/node_provider.py", line 357, in _get_node
    return self.cached_nodes[node_id]
KeyError: 'ray-test-cancel-azure-3446f302-2b-head-138eaa0b0'
```
@suquark Do you think there is a race condition around the following place? Should it be a file lock across multiple `ray up`?
https://github.com/skypilot-org/skypilot/blob/21009efc877327b5f6aa990745c453fb355de4c3/sky/skylet/providers/azure/node_provider.py#L79-L80
diff --git a/sky/skylet/providers/azure/node_provider.py b/sky/skylet/providers/azure/node_provider.py
index 29ba743f..bd1d6ed2 100644
--- a/sky/skylet/providers/azure/node_provider.py
+++ b/sky/skylet/providers/azure/node_provider.py
@@ -352,13 +352,15 @@ class AzureNodeProvider(NodeProvider):
                 except Exception as e:
                     logger.warning("Failed to delete disk: {}".format(e))
 
+    @synchronized
     def _get_node(self, node_id):
         self._get_filtered_nodes({})  # Side effect: updates cache
         return self.cached_nodes[node_id]
 
     def _get_cached_node(self, node_id):
-        if node_id in self.cached_nodes:
-            return self.cached_nodes[node_id]
+        node = self.cached_nodes.get(node_id)
+        if node is not None:
+            return node
         return self._get_node(node_id=node_id)
 
     @staticmethod
['sky/skylet/providers/azure/node_provider.py']