All posts Release Notes

Graphistry 2.41.3: Remotely run your own GPU graph queries & GPU Python on your data, and more

Graphistry 2.41.3 brings major updates, especially for API users: compute and storage are now decoupled, enabling diverse use cases.

The key feature is two new API endpoints that run user-supplied Python and GFQL on Graphistry’s GPU containers. This begins releasing the view for graph compute we shared in the popular article What is Graph Intelligence. Apps, notebooks, and pipelines can now leverage shared GPU resources remotely. For instance, a notebook can perform large PyGraphistry analytics, GFQL queries, and GPU AI without a local GPU, and a CPU-based web app can tell the Graphistry server to securely query their large database and give back the GPU-processed visualization and results.

Other highlights include a new download button, timebar animation panel, and a compatibility note for CUDA versions:

  1. GPU Python: Execute GPU Python code on data uploaded to the Graphistry server, and get back the results in JSON or string format. As discussed above, your notebooks, dashboards, and webapps can now use GPUs for many kinds of tasks. The following example shows calling Python endpoint to leverage the Graphistry container’s GPU and returning a graph as a JSON result.

    import requests
    
    url = GRAPHISTRY_BASE_PATH + "/api/v2/datasets/" + dataset_id + "/python"
    headers = {
    	'Content-Type': 'application/json',
    	'Authorization': 'Bearer ' + token
    }
    data = {
    	'execute': """
    		import graphistry
    		def task(g):
    			# extract subgraph using GFQL
    			chain_operations = graphistry.Chain([
    				graphistry.n({"label": "node_1"}),
    				graphistry.e_forward(to_fixed_point=True),
    				graphistry.n({"label": "node_2"})
    			])
    			g = g.chain(chain_operations)
    
    			# use cuDF to enrich dataset
    			g._nodes['total_score'] = g._nodes[['score_1', 'score_2', 'score_3']].sum(axis=1)
    
    			# return dataset to user
    			return {
    				'nodes': g._nodes.to_dict(orient='records') if g._nodes is not None else [],
    				'edges': g._edges.to_dict(orient='records') if g._edges is not None else []
    			}
    	"""
    }
    
    response = requests.post(url, headers=headers, json=data)
    graph = response.json()
    

    The Python endpoint is currently only available on self-hosted deployments. To get started, enable it in your system’s feature flag sections, and see the documentation for the Python endpoint for more information.

  2. GFQL API endpoints: A handful of new options have been added to the GFQL endpoint, making GFQL easier to integrate into your workflows by tailoring the output to your use-case. You can now choose between JSON, CSV, and Parquet download file formats, change various serialization options, receive only the result nodes or edges, and filter the output data to only include specified node or edge properties.

    The following example shows how these new options can be used:

    import requests
    
    url = GRAPHISTRY_BASE_PATH + "/datasets/" + dataset_id + "/gfql/nodes"
    headers = {
    	'Content-Type': 'application/json',
    	'Authorization': 'Bearer ' + token
    }
    data = {
    	"gfql_operations": [
    		{
    			"type": "Node",
    			"filter_dict": {
    				"label": "node_1"
    			}
    		},
    		{
    			"type": "Edge",
    			"direction": "forward",
    			"to_fixed_point": True
    		}
    	],
    	"format": "csv",
    	"df_export_args": {
    		"sep": "|"
    	},
    	"edge_col_subset": [
    		"destination"
    	]
    }
    
    response = requests.post(url, headers=headers, json=data)
    graph_nodes_csv = response.text
    

    See the updated GFQL documentation for more information.

  3. Download button: Much requested by analysts, use the new Download button in the data table to download the graph stored by Graphistry. The initial version downloads the unfiltered node and edge property tables, and in your choice of CSV, JSON, and Parquet file formats. This feature can be disabled by an administrator if desired.

  4. PyGraphistry[AI]: Updated to the latest version 0.34.1 from 0.33.8 which includes new ring layouts intended to make time series data easier to read, and various bug fixes and smaller features.

  5. Timebar panel animation mode: A feature designed to help users work with datasets incorporating time, by animating the graph to represent the passage of time has been released. Please see our time visualization blog post for more information.

As an upgrade notice, Graphistry is upgraded to RAPIDS 23.10 base images, which increases the server GPU driver minimum requirements to CUDA 11.8 or CUDA 12.x. This brings performance, stability, and general improvements to the CUDA-RAPIDS ecosystem within Graphistry. Note this will be the last Pascal-compatible release, as future versions upgrade to RAPIDS 24.02+ that require newer GPUs from within the last 5 years. Due to the CUDA and RAPIDS updates, this is a major release containing potentially breaking changes! Please check the release notes for more details on this release and migration notes for advanced deployment users.

Learn more in our public release notes.

Notes from the trenches, monthly.

Graph analytics, GPU viz, and the occasional war story. No spam.